题目:https://acmore.cc/problem/LOCAL/1571#desc
解法一:暴力法
1 #include <iostream> 2 3 using namespace std; 4 5 int a[30][30] = { 0 }; //初始矩阵 6 int b[30][30] = { 0 }; //结果矩阵 7 8 int getMultiSum(int a1[][30], int a2[][30], int m, int i, int j) //计算矩阵a1的第i行与矩阵a2的第j列相乘的结果,其中a1,a2是同为m阶的方阵 9 { 10 int result = 0; 11 for (int k = 0; k < m; ++k) 12 { 13 result += a1[i][k] * a2[k][j]; 14 } 15 return result; 16 } 17 18 19 int main() 20 { 21 int N, M; //N表示矩阵的阶数,M表示幂 22 while (cin >> N >> M) 23 { 24 for (int i = 0; i < N; ++i) 25 for (int j = 0; j < N; ++j) 26 cin >> a[i][j]; 27 28 switch (M) 29 { 30 case 0: //矩阵的零次方是单位矩阵 31 for (int i = 0; i < N; ++i) 32 b[i][i] = 1; 33 break; 34 35 case 1: 36 for (int i = 0; i < N; ++i) 37 for (int j = 0; j < N; ++j) 38 b[i][j] = a[i][j]; 39 40 case 2: 41 for (int i = 0; i < N; ++i) //i表示原矩阵的行 42 { 43 for (int j = 0; j < N; ++j) //j表示原矩阵的列 44 { 45 b[i][j] = getMultiSum(a, a, N, i, j); 46 } 47 48 } 49 break; 50 51 case 3: 52 int tmp[30][30]; 53 for (int i = 0; i < N; ++i) //i表示原矩阵的行 54 { 55 for (int j = 0; j < N; ++j) //j表示原矩阵的列 56 { 57 tmp[i][j] = getMultiSum(a, a, N, i, j); 58 } 59 60 } 61 for (int i = 0; i < N; ++i) //i表示原矩阵的行 62 { 63 for (int j = 0; j < N; ++j) //j表示原矩阵的列 64 { 65 b[i][j] = getMultiSum(a, tmp, N, i, j); 66 } 67 68 } 69 break; 70 71 case 4: 72 int tmp1[30][30]; 73 for (int i = 0; i < N; ++i) //i表示原矩阵的行 74 { 75 for (int j = 0; j < N; ++j) //j表示原矩阵的列 76 { 77 tmp1[i][j] = getMultiSum(a, a, N, i, j); 78 } 79 80 } 81 int tmp2[30][30]; 82 for (int i = 0; i < N; ++i) //i表示原矩阵的行 83 { 84 for (int j = 0; j < N; ++j) //j表示原矩阵的列 85 { 86 tmp2[i][j] = getMultiSum(a, tmp1, N, i, j); 87 } 88 89 } 90 for (int i = 0; i < N; ++i) //i表示原矩阵的行 91 { 92 for (int j = 0; j < N; ++j) //j表示原矩阵的列 93 { 94 b[i][j] = getMultiSum(a, tmp2, N, i, j); 95 } 96 97 } 98 99 break; 100 101 case 5: 102 int tmp3[30][30]; 103 for (int i = 0; i < N; ++i) //i表示原矩阵的行 104 { 105 for (int j = 0; j < N; ++j) //j表示原矩阵的列 106 { 107 tmp3[i][j] = getMultiSum(a, a, N, i, j); 108 } 109 110 } 111 int tmp4[30][30]; 112 for (int i = 0; i < N; ++i) //i表示原矩阵的行 113 { 114 for (int j = 0; j < N; ++j) //j表示原矩阵的列 115 { 116 tmp4[i][j] = getMultiSum(a, tmp3, N, i, j); 117 } 118 119 } 120 int tmp5[30][30]; 121 for (int i = 0; i < N; ++i) //i表示原矩阵的行 122 { 123 for (int j = 0; j < N; ++j) //j表示原矩阵的列 124 { 125 tmp5[i][j] = getMultiSum(a, tmp4, N, i, j); 126 } 127 128 } 129 for (int i = 0; i < N; ++i) //i表示原矩阵的行 130 { 131 for (int j = 0; j < N; ++j) //j表示原矩阵的列 132 { 133 b[i][j] = getMultiSum(a, tmp5, N, i, j); 134 } 135 136 } 137 138 139 break; 140 141 } 142 143 for (int i = 0; i < N; ++i) 144 { 145 int j = 0; 146 for (; j < N-1; ++j) 147 { 148 cout << b[i][j] << ‘ ‘; 149 } 150 cout << b[i][j] << endl; 151 } 152 } 153 154 return 0; 155 156 }
原文:https://www.cnblogs.com/FengZeng666/p/10355938.html