基础练习: 矩阵乘法
Posted zhenglijie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础练习: 矩阵乘法相关的知识,希望对你有一定的参考价值。
问题描述
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
例如:
A =
1 2
3 4
A的2次幂
7 10
15 22
例如:
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个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
1 2
3 4
样例输出
7 10
15 22
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 }
以上是关于基础练习: 矩阵乘法的主要内容,如果未能解决你的问题,请参考以下文章