欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

蓝桥杯VIP试题 之 基础练习 矩阵乘法 - JAVA

程序员文章站 2022-07-12 09:14:18
...

蓝桥杯VIP试题 之 基础练习 矩阵乘法 - JAVA

给定一个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

PS:矩阵乘法公式:

蓝桥杯VIP试题 之 基础练习 矩阵乘法 - JAVA

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();
	    int[][] juZhenArr = new int[N][N];
	    for(int i = 0; i < N; i++) {
	        for(int j = 0; j < N; j++) {
	        	juZhenArr[i][j] = sc.nextInt();
	        }
	    }

   	    //M大于1的情况,按乘法计算
	    if(M >= 1) {
	    	int[][] juZhenArr_Copy = juZhenArr;
	    	for(int i = 1; i < M; i++) {
	    		int[][] result = new int[N][N];
	    		for(int j = 0; j < N; j++) {
	    			for(int k = 0; k < N; k++) {
	    				int count = 0;
	    				int temp = 0;
	    				while(count < N) {
	    					//相乘求值
	    					temp += juZhenArr[j][count] * juZhenArr_Copy[count][k];
	    					count++;
	    				}
	    				result[j][k] = temp;
	    			}
	    		}
	    		juZhenArr = result;
	    	}
	    	for(int i = 0; i < N; i++) {
	    		for(int j = 0; j < N; j++) {
	    			System.out.print(juZhenArr[i][j] + " ");
	    		}
	    	}
	    }else{
	    	//M等于1,输出本身即可
	        if(M == 1){
	        	for(int i = 0; i < N; i++) {
	        		for(int j = 0; j < N; j++) {
	                	System.out.print(juZhenArr[i][j] + " ");
	            	}
	        	}
	        //M等于0的情况:输出单位矩阵
	        }else if(M == 0){	   
	        	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 + " ");
	        			}
	        		}
	        	} 
	        }
	    }    
	}
}