给定一个N阶矩阵A,输出A的M次幂(M是非负整数) 例如: A= 1 2 3 4 A的二次幂 7 10 15 22 输入格式 第一行是一个正整数N、M(1<=N<=30,0<=M<=5),表示矩阵A的阶数和要求的幂数接下来N行,没行N个绝对值不超过10的非负整数,描述矩阵A的值 输出格式 输出共N行,每行N个整数,表示A的M次幂 所对应的矩阵。相邻的数用一个空格隔开 样例输入 2 2 1 2 3 4 样例输出 7 10 15 22 代码
#include <stdio.h>
int main() {
int A[30][30],S[30][30], B[30][30], N, M, i, j;
scanf("%d %d",&N,&M);
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
scanf("%d",&A[i][j]);
}
}
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
S[i][j] = A[i][j];
}
}
if (M == 0) {
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
if (i == j) {
B[i][j] = 1;
}
else {
B[i][j] = 0;
}
}
}
}else{
if (M == 1) {/考虑特殊情况
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
B[i][j] = A[i][j];
}
}
}
else {
while (M>1) {
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
B[i][j] = 0;
}
}
int a, b, c;
for (a = 0; a < N; a++) {
c = 0;
while (c < N) {
for (b = 0; b < N; b++) {
B[c][a] += (S[c][b] * A[b][a]);
}
c++;
}
}
M--;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
S[i][j] = B[i][j];
}
}
}
}
}
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%d", B[i][j]);
if (j != N - 1) {
printf(" ");
}
}
if(i!=N-1){
printf("\n");
}
}
return 0;
}
|