题目描述
输入描述:
第一行:两个整数n(2<=n<=10)、k(1<=k<=5),两个数字之间用一个空格隔开,含义如上所示。 接下来有n行,每行n个正整数,其中,第i行第j个整数表示矩阵中第i行第j列的矩阵元素Pij且(0<=Pij<=10)。另外,数据保证最后结果不会超过10^8。
输出描述:
对于每组测试数据,输出其结果。格式为: n行n列个整数,每行数之间用空格隔开,注意,每行最后一个数后面不应该有多余的空格。
输入
2 2 9 8 9 3
输出
153 96 108 81
#include<iostream> #include<string.h> using namespace std; struct matrix//用结构体封装一个二维数组 { int a[100][100]; }origin,res;//res.a存储结果 ,origin.a是需要运算的矩阵 ,k是次幂数 ,n是矩阵的行列数 matrix multiply(matrix x,matrix y,int N)//矩阵相乘函数 { matrix temp; memset(temp.a,0,sizeof(temp.a)); for(int i=0;i<N;i++) { for(int j=0;j<N;j++) { for(int k=0;k<N;k++) { temp.a[i][j]+=x.a[i][k]*y.a[k][j]; } } } return temp; } int main() { int n,k,i,j; while(~scanf("%d%d",&n,&k)) { for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%d",&origin.a[i][j]); k--; res=origin; while(k--) { res=multiply(res,origin,n); } for(i=0;i<n;i++){ for(j=0;j<n-1;j++) printf("%d ",res.a[i][j]); printf("%d\n",res.a[i][n-1]); } } return 0; }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/232746.html原文链接:https://javaforall.net