[C++ ] 第12題的兩種方法
方法一:雙重指標(動態宣告)
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#define W 11
using namespace std;
void Matrix(int** _A, int** _B, int** _C, int _M, int _L, int _N){
long long int sum, i, j, k;
for(i=0; i<_M; i++){
for(j=0; j<_N; j++){
sum = 0;
for(k=0; k<_L; k++)
sum += *(*(_A+i)+k) * *(*(_B+k)+j);
*(*(_C+i)+j) = sum;
cout << sum << ' ';
}
cout << endl;
}
}
int main(){
int **A = new int*[W], **B = new int*[W], **C = new int*[W];
for(int i=0; i<W; i++){
*(A+i) = new int[W];
*(B+i) = new int[W];
*(C+i) = new int[W];
}
int M, N, L;
while(1){
cin >> M >> L >> N;
if(cin.eof()) break;
else{
for(int i=0; i<M; i++)
for(int j=0; j<L; j++)
cin >> A[i][j];
for(int i=0; i<L; i++)
for(int j=0; j<N; j++)
cin >> B[i][j];
cout << endl;
Matrix(A, B, C, M, L, N);
/*for(int i=0; i<M; i++){
for(int j=0; j<N; j++)
cout << setw(4) <<C[i][j];
cout << endl;
}*/
}
}
delete A;
delete B;
delete C;
return 0;
}
==========================================================================
方法二:二維陣列(靜態宣告)
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#define W 120
using namespace std;
void Matrix(long long int *_A, long long int *_B, long long int *_C, long
long int _M, long long int _L, long long int _N){
long long int sum, i, j, k;
for(i=0; i<_M; i++){
for(j=0; j<_N; j++){
sum = 0;
for(k=0; k<_L; k++)
sum += *(_A+i*W+k) * *(_B+k*W+j);
*(_C+i*W+j) = sum;
}
}
}
long long int A[W][W], B[W][W], C[W][W];
int main(){
long long int *pA, *pB, *pC;
long long int M, N, L;
while(1){
cin >> M >> L >> N;
if(cin.eof()) break;
else{
for(int i=0; i<M; i++)
for(int j=0; j<L; j++)
cin >> A[i][j];
for(int i=0; i<L; i++)
for(int j=0; j<N; j++)
cin >> B[i][j];
cout << endl;
pA = &A[0][0], pB = &B[0][0], pC = &C[0][0];
Matrix(pA, pB, pC, M, L, N);
for(int i=0; i<M; i++){
for(int j=0; j<N; j++)
cout << setw(4) <<C[i][j];
cout << endl;
}
}
}
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.4.200
推
12/14 13:05, , 1F
12/14 13:05, 1F
推
12/14 17:01, , 2F
12/14 17:01, 2F