- 问题描述
给定一个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
感想:要嵌套多个for循环~,另外小注意矩阵的0次幂为单位矩阵,1次幂是本身。
代码如下:
#include <bits/stdc++.h>
using namespace std;
void resetToZero(vector<vector<int>> &arr) {
for(size_t i = 0; i<arr.size(); ++i) {
for(size_t j =0; j<arr[i].size(); ++j) {
arr[i][j]=0;
}
}
}
int main() {
int n,m;
cin>>n>>m;
vector<vector<int>> matrix(n,vector<int>(n,0)),temp(n,vector<int>(n,0)),res(n,vector<int>(n,0));
for(int i = 0; i<n; ++i) {
for(int j = 0; j<n; ++j) {
cin>>matrix[i][j];
}
}
if(m>0)
temp = matrix;
else if(m==0) {
for(int i = 0; i<n; ++i)
temp[i][i] = 1;
}
for(int cnt =0; cnt<m–1; ++cnt) {
for(int i = 0; i<n; ++i) {
for(int j = 0; j<n; ++j) {
for(int k = 0; k<n; ++k) {
res[i][j]+=temp[i][k]*matrix[k][j];
}
}
}
temp = res;
resetToZero(res);
}
for(int i = 0; i<n; ++i) {
for(int j = 0; j<n; ++j) {
if(j>0) cout<<" ";
cout<<temp[i][j];
}
cout<<endl;
}
return 0;
}

![P11246 [GESP202409 六级] 小杨和整数拆分-171主机测评](https://www.171host.com/wp-content/uploads/2026/11/20261108100631-6af049a75855c-220x150.png)

