矩阵乘法---蓝桥杯

来源:互联网 发布:学生开淘宝店怎么样 编辑:程序博客网 时间:2024/05/15 10:40
<p class="problem-content brush:">问题描述  给定一个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 21 23 4样例输出7 1015 22</p>import java.util.Scanner;public class matrixMul{public static void main(String[] args) {int N,M;Scanner sc = new Scanner(System.in);N = sc.nextInt();//行列M = sc.nextInt();//次幂int[][] matrix = new int[N][N];//输入for(int i = 0; i < N; i++){for (int j = 0; j < N; j++) {matrix[i][j]=sc.nextInt();}}//判断几次幂if(M==1){printNum(matrix,N);}else if(M==0){for (int i=0;i < N;i++ ){for (int j=0; j<N ;j++ ){matrix[i][j]=1;}}printNum(matrix,N);}else if(M>=2&&M<=5){getNum(matrix,N,M);}}public static void getNum(int[][] matrix,int N,int M){int[][] matrixCopy = new int [N][N];for(int i = 0 ;i < N; i++){for(int j = 0; j < N; j++){for (int k = 0; k < N; k++) {matrixCopy[i][j]+=matrix[i][k]*matrix[k][j];//交换}}}--M;while((--M)>0){int [][] temp = new int[N][N];for(int i = 0; i < N; i++){for (int j = 0; j < N; j++) {temp[i][j]=matrixCopy[i][j];//用于保存上次结果}}for(int i = 0 ;i < N; i++){for(int j = 0; j < N; j++){matrixCopy[i][j]=0;//用于清空上次结果,用temp保存上次结果参加运算for (int k = 0; k < N; k++) {matrixCopy[i][j]+=temp[i][k]*matrix[k][j];}}}}printNum(matrixCopy,N);}public static void printNum(int[][] matrix,int N){//输出for(int i = 0; i < N; i++){for (int j = 0; j < N; j++) {System.out.print(matrix[i][j]+" ");}System.out.print("\n");}}}


0 0
原创粉丝点击