基础练习 矩阵乘法

Posted woz333333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础练习 矩阵乘法相关的知识,希望对你有一定的参考价值。

问题描述
  给定一个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
这个题其实就是求矩阵的乘方,在矩阵相乘的基础上循环,在网上看到很多复杂的也是优秀的代码,但是因为我个人目前水平有限只能写出依据原理实现的比较low的代码,
虽然low但是也算容易理解吧
代码如下:
 1 #include <iostream>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     int n, m;
 8     cin >> n >> m;
 9     int martix[n][n], result[n][n];
10     for(int i=0;i<n;i++)
11     for(int j=0;j<n;j++)
12     {
13         cin >> martix[i][j];
14         result[i][j] = martix[i][j];
15     }
16     
17     //方阵的0次幂为单位矩阵(左上角到右下角的对角线为1其他部分为0) 
18     if(m==0)
19     {
20         for(int i=0;i<n;i++)
21         {
22             int flag=1; 
23             for(int j=0;j<n;j++)
24             {
25                 if(j==n-1) flag=0;
26                 if(flag)  //元素不是一行的最后一个 
27                 {
28                     if(i==j) cout << 1 << "  ";
29                     else cout << 0 << "  ";
30                 }
31                 else
32                 {
33                     if(i==j) cout << 1 ;
34                     else cout << 0 ;
35                 }
36             }
37             cout << endl;    
38         } 
39     }//if
40     
41     else
42     {
43         //循环计算矩阵的乘方 
44         for(int k=1;k<m;k++)
45         {
46             //临时数组保存计算结果:
47             int temp[n][n]; 
48             memset(temp,0,sizeof(temp)); 
49             
50             //计算每次的乘积: 
51             for(int i=0;i<n;i++)
52             for(int j=0;j<n;j++)
53             for(int s=0;s<n;s++)
54             {
55                 temp[i][j] += result[i][s] * martix[s][j];
56             }    
57             
58             //把每次计算出的结果赋给结果矩阵: 
59             for(int i=0;i<n;i++)
60             for(int j=0;j<n;j++)
61             {
62                 result[i][j] = temp[i][j];
63             }    
64         }
65         
66         //按题目要求输出: 
67         for(int i=0;i<n;i++)
68         {
69             for(int j=0;j<n;j++)
70             {
71                 if(j!=n-1)
72                     cout << result[i][j] << "  ";
73                 else
74                     cout << result[i][j];
75             }
76             cout << endl;
77         }    
78     }//else
79 
80     
81     
82     
83     return 0;
84 }

 

以上是关于基础练习 矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯基础练习---矩阵乘法

蓝桥网试题 java 基础练习 矩阵乘法

1571:基础练习 矩阵乘法

基础练习: 矩阵乘法

基础练习 矩阵乘法

基础练习 矩阵乘法 时间限制:1.0s 内存限制:512.0MB