蓝桥杯 试题 基础练习 矩阵乘法(java)

试题 基础练习 矩阵乘法

资源限制
时间限制: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行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
样例输出
7 10
15 22

import java.util.Scanner;
public class Main {
 static int n=0;
 static int m=0;
 public static void main(String[] args) {
	Scanner sc =new Scanner(System.in);
	n=sc.nextInt();
	m=sc.nextInt();
	int arr[][]=new int[n][n];

	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			arr[i][j]=sc.nextInt();
		}
	}

	if(m>0) fun(arr,arr,1);
	if(m==0)  {
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(i==j)  System.out.print("1");
				if(i!=j)  System.out.print("0");
				if(j<n-1) System.out.print(" ");
          }
          System.out.println("");
     }
   }
}

static void fun(int arr1[][],int arr2[][],int x){
	int arr3[][]=new int[n][n];
	if(x<m){
		for (int i=0;i<n;i++){
			for(int j=0;j<n;j++){
			    arr3[i][j]=mul(arr1,arr2,i,j);
    }
   }
   fun(arr3,arr2,x+1);
  }
	if(x==m){
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				System.out.print(arr1[i][j]);
				if(j<n-1) System.out.print(" ");
        }
        	System.out.println("");
     }
  }
}
static int mul(int arr1[][],int arr2[][],int i,int j){
  int sum=0;
  for(int k=0;k<n;k++){
   sum=sum+arr1[i][k]*arr2[k][j];
  }
  return sum;
 }
}

你可能感兴趣的:(蓝桥杯)