【试题 基础练习 矩阵乘法】暴力矩阵乘法,再次了解一下矩阵

问题描述

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

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.*;

public class Main {
    public  static  void main(String [] args){
        Scanner sc =new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int arr[][] = new int[n+10][n+10];
        int brr[][] = new int[n+10][n+10];
        for(int i=0;i<n;i++)
            for(int j=0;j<n;j++)
                brr[i][j]=arr[i][j]=sc.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();
            }
        }
        else if(m==1){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++) System.out.print(arr[i][j]+" ");
                System.out.println();
            }

        }else {
             for(int z=1;z<m;z++){
                 int temp[][]=new int[n+10][n+10];
                 for(int i=0;i<n;i++)
                   for(int j=0;j<n;j++){
                     int add = 0;
                        for(int y=0;y<n;y++)
                           add+=arr[i][y]*brr[y][j];
                        temp[i][j]=add;
                  }
                  brr=temp;
             }
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++) System.out.print(brr[i][j]+" ");
                System.out.println();
            }
        }

   }
}

  

原文地址:https://www.cnblogs.com/wszhu/p/12609134.html

时间: 2024-08-04 02:37:31

【试题 基础练习 矩阵乘法】暴力矩阵乘法,再次了解一下矩阵的相关文章

二维数据练习--矩阵的加法和乘法

数组的练习示例展示: package arrayList; /** * 矩阵的集中运算法则:求和,求积,求逆矩阵,转置矩阵...... * @author Drew * */ public class Arrays { /** * 两个二维数组(矩阵)求和. * @param a 矩阵(二维数组) * @param b 矩阵(二维数组) * @return 返回一个矩阵(二维数组) */ public static int[][] add(int [][] a,int [][] b) { int

定义一个Matrix类,实现矩阵的加法和乘法

#include<iostream> using namespace std; class Matrix { int row;//矩阵的行 int col;//矩阵的列 int **a;//保存二维数组的元素 public: Matrix();//默认构造函数 Matrix(int r, int c); Matrix(const Matrix &is);//拷贝构造函数 void Madd(const Matrix &is);//矩阵加 Matrix Mmul(const Ma

斐波那契数列的矩阵推导(看不懂的可以放弃矩阵了)

一.矩阵乘法 设矩阵A,B 满足 :A的列数==B的行数 矩阵乘法的运算规则: 将A矩阵的每一行乘以B矩阵的每一列 * == == 二.斐波那契数列的矩阵推导 首先我们想 Fib[i]=Fib[i-1]+Fib[i-2]; 所以斐波那契数列的第i项之与两个数也就是Fib[i-1]+Fib[i-2]有关 那么我们可以设第一个矩阵 M1= 因为我们需要利用矩阵推出斐波那契的第n项 所以我们设M1的下一项为M3 则M3=(也就是让M1的下标整体后移一位) 那么现在我们需要一个过渡矩阵M2来实现这个从M

串行乘法与并行乘法

以下内容摘自<步步惊芯--软核处理器内部设计分析>一书 串行乘法 OR1200中串行乘法采用的是"移位--加"迭代算法,这种算法借鉴了手工计算乘法的过程,对于二进制乘法,比如:1101*1011,手工计算过程如图8.1所示. 图8.1 手工计算二进制乘法的过程 从图中可知手工计算时会将被乘数与乘数中每一位依次相乘,最后将所有的乘积项一并相加.这种方法速度快,但是用硬件实现时,会耗费较多硬件资源."移位--加"迭代算法对此作了修改:每算出一乘积项,就加到乘

【编程题目】对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一

45.雅虎(运算.矩阵):1.对于一个整数矩阵,存在一种运算,对矩阵中任意元素加一时,需要其相邻(上下左右)某一个元素也加一,现给出一正数矩阵,判断其是否能够由一个全零矩阵经过上述运算得到. 这道题,是我目前为止做过的最最最最最麻烦.最繁琐的题目了. 思路: 把输入的矩阵一步步还原成 0 矩阵 一个数字,只可能伴随着它上下左右四个方向的数字变化. ①如果数字比它周围四个数的和要大,那么一定不满足条件. ②如果数字小于等于四周的数字和,且其四周仅有一个数字不为0: 不为0的那个周围数字的大小 -=

证明:如果矩阵A的列向量组线性无关,则矩阵ATA可逆

证明:如果矩阵A的列向量组线性无关,则矩阵ATA可逆 设ATAX=0,如果ATA可逆,则ATAX=0有唯一解X=0,即X为零向量. 因此,原命题的证明等价于证明"如果矩阵A的列向量组线性无关,则ATAX=0有唯一解X=0". 令XTATAX=0,则有(AX)TAX=0.由(AX)TAX=0可知AX是零向量,其中X是ATAX=0的解. 设A = [a1 a2 - an],X=[x1 x2 - xn]T,因为A的列向量组线性无关,所以令x1a1+x2a2+-+xnan=0成立的唯一解是x1

28 python 序列的乘法(字符串乘法)检查某个值是否属于一个序列 求序列的长度、最大值和最小值

第四课:序列的乘法(字符串乘法) # 序列的乘法 # 序列和一个整数相乘 序列的乘法 可以达到 复制 整数份的字符串的效果 s = "a" print(s * 12) # aaaaaaaaaaaa numbers = [1,2,3,4,5] print(numbers * 3) # [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] # 打印正三角 * 号的功能 ''' [' ', ' ', ' ', ' ', ' ', '*', ' ', '

poj 3735 Training little cats 矩阵快速幂+稀疏矩阵乘法优化

题目链接 题意:有n个猫,开始的时候每个猫都没有坚果,进行k次操作,g x表示给第x个猫一个坚果,e x表示第x个猫吃掉所有坚果,s x y表示第x个猫和第y个猫交换所有坚果,将k次操作重复进行m轮,问最后这n个猫各自有多少坚果. 题解:构造(n+1)*(n+1)的单位矩阵,data[i][j]表示第i个猫与第j个猫进行交换,最后一列的前n项就是每个猫的坚果数目,s操作就交换对应行,矩阵快速幂时间复杂度O(n^3*log2(m))会超时,我们注意到在n*n的范围内每一行只有一个1,利用稀疏矩阵的

矩阵乘法 洛谷 P3390【模板】矩阵快速幂

P3390 [模板]矩阵快速幂 题目背景 矩阵快速幂 题目描述 给定n*n的矩阵A,求A^k 输入输出格式 输入格式: 第一行,n,k 第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素 输出格式: 输出A^k 共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7 输入输出样例 输入样例#1: 2 1 1 1 1 1 输出样例#1: 1 1 1 1 说明 n<=100, k<=10^12, |矩阵元素|<=1000 算法:矩阵快速幂