这题考察的是怎么将矩阵相乘,是基础的用编程实现矩阵相乘的题目。
下面代码有些啰嗦,很多地方是重复累赘,可以自己摸索,精简。
#include <iostream>
using namespace std;
int main()
{
int A[35][35],A1[35][35],a[35][35],m,n;
//A数组是保存原数组的,A1是用来更新数组的,a是用做空数组
cin >> n >> m;
for( int i=0; i<n; i++ )
for( int j=0; j<n; j++ )
{
cin >> A[i][j];
A1[i][j]=A[i][j];
a[i][j] = 0;
}
m = m - 1;//因为A1的初始值是一样的,就可以省去一步
if( m == -1 )//矩阵的0次幂就是矩阵的0次方,为矩阵E,直接输出
for( int i=0; i<n; i++ )
{
for( int j=0; j<n; j++ )
{
if( i==j )
cout << '1';
else
cout << '0';
if( j != n-1)
cout << " ";
}
cout << endl;
}
else
{
while(m--)
{
for( int i=0; i<n; i++ )
for( int j=0; j<n; j++ )
for( int k=0; k<n; k++ )
a[i][j] = a[i][j]+A1[i][k]*A[k][j];
for( int i=0; i<n ;i++ )//作用是初始化数组a,以及 将得到的矩阵存储在A1里
for( int j=0; j<n; j++)
{
A1[i][j] = a[i][j];
a[i][j] = 0;
}
}
for( int i=0; i<n; i++ )
{
for( int j=0; j<n; j++ )
{
cout << A1[i][j];
if( j != n-1)
cout << " ";
}
cout << endl;
}
}
return 0;
}