矩阵乘法(蓝桥杯试题)

矩阵乘法(蓝桥杯试题)

问题描述
给定一个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

package lanqiaobei;

import java.util.Scanner;
/**
 * @version 2016年02月19日11:46:43 v1.0
 * @author xubin
 *
 */
public class Question3 {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        Integer[][] a = new Integer[n][n];
        Integer[][] result = new Integer[n][n];  //保存结果
        for(int i=0;i < n;i ++){
            for(int j=0;j < n;j ++)
                a[i][j] = scanner.nextInt();
        }
        result = a;
        for(int i = 1;i < m;i++)
            result = multiplyMaritx(result, a);

        printMaritx(result);
    }

    /**
     * 打印二维数组
     * @param a
     */
    public static void printMaritx(Integer[][] a){
        for(int i = 0;i < a.length;i ++){
            for(int j = 0;j < a[i].length;j ++)
                System.out.print(a[i][j] + " ");
            System.out.println();
        }
    }

    /**
     * 两个同阶矩阵相乘,返回结果。
     * @param a 第一个矩阵
     * @param b 第二个矩阵
     * @return 相乘的结果
     */
    public static Integer[][] multiplyMaritx(Integer[][] a,Integer[][] b){
        int n = a.length;
        Integer[][] result = new Integer[n][n];  //保存结果
        for(int i = 0;i < n;i ++){
            //遍历二位数组a的行
            for(int j = 0;j < n;j++){
                //遍历二位数组b的列
                Integer c = new Integer(0);
                for(int k = 0;k < n;k ++)
                     //第i行j列的值为a的第i行上的n个数和b的第j列上的n个数对应相乘之和,
                    //其中n为a的列数,也是b的行数,a的列数和b的行数相等
                    c += a[i][k] * b[k][j];
                result[i][j] = c;
            }
        }

        return result;
    }

}

你可能感兴趣的:(算法,java)