矩阵幂
给定一个 n×n 的矩阵 P,求该矩阵的 k 次幂,即 P^k。
解题关键是矩阵乘法
vector<vector<int>> mul(vector<vector<int>> a, vector<vector<int>> b)
{
vector<vector<int>> temp(n, vector<int>(n, 0)) ;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
for(int k = 0; k < n; k++)
temp[i][j] += a[i][k] * b[k][j];
return temp;
}
代码
#include <iostream>
#include <vector>
using namespace std;
int n, k;
vector<vector<int>> mul(vector<vector<int>> a, vector<vector<int>> b)
{
vector<vector<int>> temp(n, vector<int>(n, 0)) ;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
for(int k = 0; k < n; k++)
temp[i][j] += a[i][k] * b[k][j];
return temp;
}
int main()
{
cin >> n >> k;
vector<vector<int>> a(n, vector<int>(n));
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin >> a[i][j];
vector<vector<int>> res(n, vector<int>(n, 0));
for(int i = 0; i < n; i++)res[i][i] = 1;
for(int i = 0; i < k; i++)
res = mul(res, a);
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
cout << res[i][j] << " ";
puts("");
}
return 0;
}
旋转矩阵
任意输入两个 9 阶以下矩阵,要求判断第二个是否是第一个的旋转矩阵(顺时针),如果是,输出旋转角度(0、90、180、2700、90、180、270),如果不是,输出 −1。
解题关键是如何将矩阵旋转90°。 模拟就行
vector<vector<int>> rotate(vector<vector<int>> a)
{
vector<vector<int>> t(n, vector<int>(n));
for(int i = 0; i < n; i++)
for(int j = 0, k = n - 1; j < n; j++, k--)
t[i][j] = a[k][i];
return t;
}
代码
#include <iostream>
#include <vector>
using namespace std;
const int N = 10;
int n;
vector<vector<int>> rotate(vector<vector<int>> a)
{
vector<vector<int>> t(n, vector<int>(n));
for(int i = 0; i < n; i++)
for(int j = 0, k = n - 1; j < n; j++, k--)
t[i][j] = a[k][i];
return t;
}
int main()
{
cin >> n;
vector<vector<int>> a(n, vector<int>(n));
vector<vector<int>> b(n, vector<int>(n));
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin >> a[i][j];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin >> b[i][j];
int ans = 0;
for(int i = 0; i < 4; i++)
{
if( a == b )
{
cout << i * 90 << endl;
return 0;
}
a = rotate(a);
}
puts("-1");
return 0;
}
评论区