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

蓝桥杯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:矩阵乘法公式:

111

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 + " ");
	        			}
	        		}
	        	} 
	        }
	    }    
	}
}
发布了462 篇原创文章 · 获赞 651 · 访问量 51万+

猜你喜欢

转载自blog.csdn.net/Czhenya/article/details/104646649