蓝桥 BASIC-17 矩阵乘法
程序员文章站
2022-06-12 12:47:04
...
矩阵乘法
问题描述
给定一个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次幂所对应的矩阵。相邻的数之间用一个空格隔开
(注:图片来自:https://www.cnblogs.com/didcq/p/6489903.html)
#include<iostream>
using namespace std;
int main()
{
int a[35][35]={};
int b[35][35]={};
int c[35][35]={};
int p,q;//阶数,幂数
int x,y;//用于表示阶数 x<=p ,用于表示幂数 y<=q
int i,j,k;
cin >> p >> q;
x = p;
y = q;
for(i=0;i<p;i++)//输入
{
for(j=0;j<p;j++)
{
cin >> a[i][j];
b[i][j] = a[i][j];
}
}
if(q == 0)
{
for(i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
if(i==j)
cout << "1" << " ";
else
cout << "0" << " ";
}
cout << endl;
}
}
if(q == 1)
{
for(i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
cout << a[i][j] << " ";
}
cout << endl;
}
}
while(y >= 2)
{
while(x)
{
for(i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
c[i][j] += a[i][x-1] * b[x-1][j];
}
}
x--;//每进行一次乘法,阶数减一
}
x = p;
for(i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
a[i][j] = c[i][j];
c[i][j] = 0;
}
}
y--;//矩阵每进行一次乘法,幂数减一(幂数为n,则进行n-1次乘法)
}
if(q >= 2)
{
for(i=0;i<p;i++)
{
for(j=0;j<p;j++)
{
cout << a[i][j];
cout << " ";
}
cout << endl;
}
}
return 0;
}
上一篇: 2016--取球博弈
下一篇: 蓝桥:算法训练 数组逆序排列