您的位置:首页 > 其它

A1041. 矩阵乘法

2018-02-12 23:59 141 查看
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

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(){
    int n,m;
    while((scanf("%d %d",&n,&m))!=EOF){
        int a[30][30]={0},tmp[30][30]={0},ans[30][30]={0};
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                scanf("%d ",&a[i][j]);
                tmp[i][j]=a[i][j];
                ans[i][j]=a[i][j];
            }
        }
        if(m==0){
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    if(i==j)
                        printf("1 ");
                    else
                        printf("0 ");
                }
                printf("\n");
            }
        }
        else{
            while(m>1){              
                 for(int i=0;i<n;i++){  
                     for(int j=0;j<n;j++){  
                         tmp[i][j]=ans[i][j];  
                     }  
                 }
                 memset(ans,0,sizeof(ans));
                 for(int i=0;i<n;i++){
                     for(int j=0;j<n;j++){
                         for(int k=0;k<n;k++){
                             ans[i][j]+=a[i][k]*tmp[k][j];
                         }
                     }
                 }
                 m--;
            }
            for(int i=0;i<n;i++){
                for(int j=0;j<n;j++){
                    printf("%d ",ans[i][j]);
                }
                printf("\n");
            }
        }
    }

    system("pause");
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: