Description
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
Input
第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
Output
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
Sample Input
2 2
1 2
3 4
Sample Output
7 10
15 22
所需知识点:
1.单位矩阵 :
在矩阵的乘法中,有一种矩阵起着特殊的作用,如同数的乘法中的1,这种矩阵被称为单位矩阵。它是个方阵,从左上角到右下角的对角线(称为主对角线)上的元素均为1。除此以外全都为0。如n=3,m=0.
1 0 0
0 1 0
0 0 1
2.矩阵行列为1:
结果是一阶方阵,不过是用一个数的形式来显现,但其本质仍是矩阵。
如:n=1,m=3.
111=1
结果为1.
#include<stdio.h>
int main(void)
{
int a;
int b;
int i;
int j;
int m; //次方大小
int n; //矩阵行列大小
int k; //值的过渡
int num=0;
scanf("%d%d",&n,&m);
int arr[n][n];
int str[n][n];
int str_1[n][n];
if(0==m) //如果要求零次方,则为单位矩阵
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(i==j)
printf("1 ");
else
printf("0 ");
}
printf("\n");
}
}
else
{
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&arr[i][j]); //取值
for(a=0;a<n;a++) //进行第一次运算
for(b=0;b<n;b++)
{
k=0;
for(j=0;j<n;j++)
k+=arr[a][j]*arr[j][b];
str[a][b]=k;
}
k=0;
while(m-2!=num++) //进行以后的m-2次运算
{
for(a=0;a<n;a++)
for(b=0;b<n;b++)
{
k=0;
for(j=0;j<n;j++)
k+=str[a][j]*arr[j][b];
str_1[a][b]=k;
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
str[i][j]=str_1[i][j];
}
for(i=0;i<n;i++) //输出结果
{
for(j=0;j<n;j++)
printf("%d ",str[i][j]);
printf("\n");
}
}
return 0;
}
Size
935