码迷,mamicode.com
首页 > 其他好文 > 详细

基础练习: 矩阵乘法

时间:2020-04-22 19:49:02      阅读:68      评论:0      收藏:0      [点我收藏+]

标签:之间   思路   ==   乘法   mes   int   cto   win   直接   

问题描述
  给定一个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
思路:申请三个vector数组,c++vector优势就在于可以直接进行赋值,不再像c语言那样用两个循环进行赋值,如果幂等于0就输出单位矩阵,等于1就原样输出,大于等于2就进入循环就ok
代码:
 1 #include<iostream>
 2 #include<windows.h>
 3 #include<vector>
 4 
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int n,c;
10 
11     cin >> n >> c;
12     vector< vector<int> > a(n, vector<int>(n, 0));
13     vector< vector<int> > b(n, vector<int>(n, 0));
14     vector< vector<int> > d(n, vector<int>(n, 0));
15     if(c == 0)
16     {
17         for(int i = 0; i < n; i++)
18         {
19             for(int j = 0; j < n; j++)
20             {
21                 if(i == j)
22                 {
23                     cout << "1" << " ";
24                 }
25                 else
26                 {
27                     cout << a[i][j] << " ";
28                 }
29                 
30             }
31             cout << endl;
32         }
33         return 0;
34     }
35 
36     for(int i = 0; i < n; i++)  //生成矩阵
37     {
38         for(int j = 0; j < n; j++)
39         {
40             cin >> a[i][j];
41         }
42     }
43     b = a;  //c++优势!!
44     if(c == 1)
45     {
46         for(int i = 0; i < n; i++)
47         {
48             for(int j = 0; j < n; j++)
49             {
50                 cout << b[i][j] << " ";
51             }
52             cout << endl;
53         }
54         return 0;
55     }
56     
57     for(int i = 2; i <= c; i++)  //最外层循环控制幂
58     {
59         for(int j = 0; j < n; j++)
60         {
61             for(int k = 0; k < n; k++)
62             {
63                 int sum = 0;
64                 for(int l = 0; l < n; l++)
65                 {
66                     sum += a[j][l]*b[l][k];
67                 }
68                 d[j][k] = sum;
69             }
70         }
71         b = d;
72     }
73     
74     for(int i = 0; i < n; i++)
75     {
76         for(int j = 0; j < n; j++)
77         {
78             cout << d[i][j] << " ";
79         }
80         cout << endl;
81     }
82 
83     system("pause");
84     return 0;
85 }

 

基础练习: 矩阵乘法

标签:之间   思路   ==   乘法   mes   int   cto   win   直接   

原文地址:https://www.cnblogs.com/ZhengLijie/p/12755285.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!