首页 > 其他 > 详细

1571:基础练习 矩阵乘法

时间:2019-02-08 10:48:58      阅读:188      评论:0      收藏:0      [点我收藏+]

 

 题目: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 }

 

1571:基础练习 矩阵乘法

原文:https://www.cnblogs.com/FengZeng666/p/10355938.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!