蓝桥杯-矩阵乘法
【摘要】 资源限制时间限制:1.0s 内存限制:512.0MB问题描述 给定一个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行,每...
资源限制
时间限制:1.0s 内存限制:512.0MB
问题描述
给定一个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
提交代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
long[][] a = new long[n][n];//用int容易越界,所以用long
long[][] b = new long[n][n];
for(int i = 0;i<n;i++) {
for(int j = 0;j<n;j++) {
a[i][j] = b[i][j] = sc.nextLong();//写出两个矩阵,然后相乘
}
}
if(m == 0) {//矩阵得0次幂等于单位矩阵E
for(int i = 0;i<n;i++) {
for(int j = 0;j<n;j++) {
if(i == j) {
System.out.print(1+" ");
}
else
{
System.out.print(0+" ");
}
}
System.out.println();
}
}
else if(m == 1) {//输出自己
for(int i = 0;i<n;i++) {
for(int j = 0;j<n;j++) {
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
else {
for(int i = 1;i<m;i++) {
long[][] db = new long[n][n]; //临时矩阵
for(int j = 0;j<n;j++) {
for(int k = 0;k<n;k++) {
for(int l = 0;l<n;l++) {
db[j][k] +=a[j][l]*b[l][k]; //核心公式
}
}
}
b = db;//将db赋值给b,下次幂运算就用二次乘一次达到递增
}
//输出
for(int i = 0;i<n;i++) {
for(int j = 0;j<n;j++) {
System.out.print(b[i][j]+" ");
}
System.out.println();
}
}
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)