题目: https://acmore.cc/problem/LOCAL/1571#desc
解法一: 暴力法
- #include <iostream>
- using namespace std;
- int a[30][30] = { 0 }; // 初始矩阵
- int b[30][30] = { 0 }; // 结果矩阵
- int getMultiSum(int a1[][30], int a2[][30], int m, int i, int j) // 计算矩阵 a1 的第 i 行与矩阵 a2 的第 j 列相乘的结果, 其中 a1,a2 是同为 m 阶的方阵
- {
- int result = 0;
- for (int k = 0; k <m; ++k)
- {
- result += a1[i][k] * a2[k][j];
- }
- return result;
- }
- int main()
- {
- int N, M; //N 表示矩阵的阶数, M 表示幂
- while (cin>> N>> M)
- {
- for (int i = 0; i <N; ++i)
- for (int j = 0; j < N; ++j)
- cin>> a[i][j];
- switch (M)
- {
- case 0: // 矩阵的零次方是单位矩阵
- for (int i = 0; i < N; ++i)
- b[i][i] = 1;
- break;
- case 1:
- for (int i = 0; i < N; ++i)
- for (int j = 0; j < N; ++j)
- b[i][j] = a[i][j];
- case 2:
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- b[i][j] = getMultiSum(a, a, N, i, j);
- }
- }
- break;
- case 3:
- int tmp[30][30];
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- tmp[i][j] = getMultiSum(a, a, N, i, j);
- }
- }
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- b[i][j] = getMultiSum(a, tmp, N, i, j);
- }
- }
- break;
- case 4:
- int tmp1[30][30];
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- tmp1[i][j] = getMultiSum(a, a, N, i, j);
- }
- }
- int tmp2[30][30];
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- tmp2[i][j] = getMultiSum(a, tmp1, N, i, j);
- }
- }
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- b[i][j] = getMultiSum(a, tmp2, N, i, j);
- }
- }
- break;
- case 5:
- int tmp3[30][30];
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- tmp3[i][j] = getMultiSum(a, a, N, i, j);
- }
- }
- int tmp4[30][30];
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- tmp4[i][j] = getMultiSum(a, tmp3, N, i, j);
- }
- }
- int tmp5[30][30];
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- tmp5[i][j] = getMultiSum(a, tmp4, N, i, j);
- }
- }
- for (int i = 0; i < N; ++i) //i 表示原矩阵的行
- {
- for (int j = 0; j < N; ++j) //j 表示原矩阵的列
- {
- b[i][j] = getMultiSum(a, tmp5, N, i, j);
- }
- }
- break;
- }
- for (int i = 0; i < N; ++i)
- {
- int j = 0;
- for (; j < N-1; ++j)
- {
- cout << b[i][j] << ' ';
- }
- cout << b[i][j] << endl;
- }
- }
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2947299.html