9 矩阵乘法
作者: Turbo时间限制: 1S章节: 基本练习(循环)
问题描述 :
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
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
代码:
/*
1 2 3 4 5 6 7 8 9 0 ! @ # $ % ^ & * ()
T9 矩阵乘法
*/
#include<stdio.h>
#include<string.h>
#define MAX_SIZE 30
int main() {
int i = 0, j = 0, k = 0, l = 0;
int N = 0, M = 0;
int matrix[MAX_SIZE + 1][MAX_SIZE + 1] = {0};
int res[MAX_SIZE + 1][MAX_SIZE + 1] = {0};
int temp[MAX_SIZE + 1][MAX_SIZE + 1] = {0};// 存放相乘的中间结果
scanf("%d%d", &N, &M);
if (M == 0) {// 零次方,特殊处理
for (i = 1; i <= N; i++) {// 打印结果
for (j = 1; j <= N; j++) {
if (i == j) {
if (j == 1)
printf("1");
else
printf(" 1");
}
else {
if (j == 1)
printf("0");
else
printf(" 0");
}
}
printf("\n");
}
return 0;
}
for (i = 1; i <= N; i++) {
for (j = 1; j <= N; j++) {
scanf("%d", &matrix[i][j]);
res[i][j] = matrix[i][j];
}
}
for (l = 1; l <= M - 1; l++) {// 相乘m次
for (i = 1; i <= N; i++) {
for (j = 1; j <= N; j++) {
temp[i][j] = 0;
for (k = 1; k <= N; k++) {
//printf("%d*%d=%d\n", res[i][k], matrix[k][j], res[i][k] * matrix[k][j]);
temp[i][j] += res[i][k] * matrix[k][j];
}
}
}
for (i = 1; i <= N; i++)// 更新结果
for (j = 1; j <= N; j++)
res[i][j] = temp[i][j];
}
for (i = 1; i <= N; i++) {// 打印结果
for (j = 1; j <= N; j++) {
if (j == 1)
printf("%d", res[i][j]);
else
printf(" %d", res[i][j]);
}
printf("\n");
}
return 0;
}