A1041. 矩阵乘法

A1041. 矩阵乘法
时间限制: 1.0s   内存限制: 512.0MB  
问题描述
  给定一个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. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. int main(){
  5.     int n,m;
  6.     while((scanf("%d %d",&n,&m))!=EOF){
  7.         int a[30][30]={0},tmp[30][30]={0},ans[30][30]={0};
  8.         for(int i=0;i<n;i++){
  9.             for(int j=0;j<n;j++){
  10.                 scanf("%d ",&a[i][j]);
  11.                 tmp[i][j]=a[i][j];
  12.                 ans[i][j]=a[i][j];
  13.             }
  14.         }
  15.         if(m==0){
  16.             for(int i=0;i<n;i++){
  17.                 for(int j=0;j<n;j++){
  18.                     if(i==j)
  19.                         printf("1 ");
  20.                     else
  21.                         printf("0 ");
  22.                 }
  23.                 printf("\n");
  24.             }
  25.         }
  26.         else{
  27.             while(m>1){              
  28.                  for(int i=0;i<n;i++){  
  29.                      for(int j=0;j<n;j++){  
  30.                          tmp[i][j]=ans[i][j];  
  31.                      }  
  32.                  }
  33.                  memset(ans,0,sizeof(ans));
  34.                  for(int i=0;i<n;i++){
  35.                      for(int j=0;j<n;j++){
  36.                          for(int k=0;k<n;k++){
  37.                              ans[i][j]+=a[i][k]*tmp[k][j];
  38.                          }
  39.                      }
  40.                  }
  41.                  m--;
  42.             }
  43.             for(int i=0;i<n;i++){
  44.                 for(int j=0;j<n;j++){
  45.                     printf("%d ",ans[i][j]);
  46.                 }
  47.                 printf("\n");
  48.             }
  49.         }
  50.     }
  51.     system("pause");
  52.     return 0;
  53. }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值