~直接放代码 便于自己以后查看(我写的可能有点冗余,但基本思路和想法很简单)~
7-18 矩阵相乘修改(是我想复杂了)
//两矩阵相乘代码核心部分更改
int [][] c = new int [N][N];
for(int i=0 ; i<N ; i++) {
for(int j=0 ; j<N ; j++) {
for(int k=0 ; k<N ; k++) {
c[i][j] += a[i][k]*b[k][j];
}
}
}
//n阶矩阵的加乘
#include <iostream>
using namespace std;
//A+B
void ApB(int **arrA,int **arrB,int N){
int **mid = new int *[N];
for(int i=0 ; i<N ; i++){
mid[i] = new int [N];
}
for(int i=0 ; i<N ; i++){
for(int j=0 ; j<N ; j++){
mid[i][j] = arrA[i][j]+arrB[i][j];
cout<<"\t"<<mid[i][j];
}
if((i+1)%N != 0)cout<<endl;
}
for(int i=0 ; i<N ; i++){
delete []mid[i];
}
delete []mid;
}
//A*B
void AcB(int **arrA,int **arrB,int N){
int **mid = new int *[N];
int sum = 0;
int cou = 0;
for(int i=0 ; i<N ; i++){
mid[i] = new int [N];
}
for(int i=0 ; i<N ; i++){
int t=0;
sum = 0;
for(int j=0 ; j<N ; j++){
sum += arrA[i][j]*arrB[j][t];
if(t!=N&&j == N-1){
j = -1;
mid[i][t] = sum;
t++;
sum = 0;
}//难点
}
}
for(int i=0 ; i<N ; i++){
for(int j=0 ; j<N ; j++){
cout<<"\t"<<mid[i][j];
}
if((i+1)%N != 0)cout<<endl;
}
for(int i=0 ; i<N ; i++){
delete []mid[i];
}
delete []mid;
}
int main(){
int N;
while(cin>>N&&!cin.eof()){
int **arrA = new int *[N];
int **arrB = new int *[N+1];
for(int i=0 ; i<N ; i++){
arrA[i] = new int [N];
arrB[i] = new int [N+1];
}
cout<<"A矩阵: "<<endl;
for(int i=0 ; i<N ; i++){
for(int j=0 ; j<N ; j++){
cin>>arrA[i][j];
}
}
cout<<"B矩阵: "<<endl;
for(int i=0 ; i<N ; i++){
for(int j=0 ; j<N ; j++){
cin>>arrB[i][j];
}
}
cout<<"A+B: "<<endl;
ApB(arrA,arrB,N);
cout<<endl;
cout<<"A*B: "<<endl;
AcB(arrA,arrB,N);
for(int i=0 ; i<N ; i++ ){
delete []arrA[i];
delete []arrB[i];
}
delete []arrA;
delete []arrB;
}
return 0;
}