基础练习 矩阵乘法

问题描述

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

资源限制
时间限制:1.0s 内存限制:512.0MB


我的答案

import java.util.Scanner;

class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt(); //阶数
        int m = in.nextInt(); //幂数
        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+" ");
                    }
                }
                System.out.println();
            }
            return;
        }
        long[][] a = new long[n][n];
        for(int i=0;i<n;i++){
            for(int j =0;j<n;j++){
                a[i][j]=in.nextInt();
            }
        }
        if(m!=1){
            a = getVal(a,a,m);
        }
        for(int i=0;i<n;i++){
            for (int j = 0; j < n; j++) {
                System.out.print(a[i][j]+" ");
            }
            System.out.println();
        }

    }

    /**
     * 进行幂运算
     * @param a
     * @param b
     * @param m
     * @return
     */
    public static long[][] getVal(long[][] a,long[][] b,int m){
        if(m==1){
            return a;
        }
        return  getVal(muti(a,b),b,m-1);
    }

    /**
     * 获得两个矩阵相乘的结果 a*b
     * @param a
     * @param b
     * @return
     */
    public static long[][] muti(long[][] a, long[][] b){
        long[][] res = new long[a.length][a.length];
        for(int i=0;i<a.length;i++){
            for(int j=0;j<a.length;j++){
                for(int k=0;k<a.length;k++){
                    res[i][j] += a[i][k]*b[k][j];
                }
            }
        }
        return res;
    }
}

小结:我吐了!这个i j k写错一个排半天错。吸取教训吧

题目来源:http://lx.lanqiao.cn/problem.page?gpid=T58

你可能感兴趣的:(算法刷题记录,java,数据结构,算法)