蓝桥杯 BASIC-17 基础练习 矩阵乘法

基础练习 矩阵乘法  

时间限制: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次幂所对应的矩阵。相邻的数之间用一个空格隔开

扫描二维码关注公众号,回复: 8602736 查看本文章

样例输入

2 2
1 2
3 4

样例输出

7 10
15 22
 

#include <stdio.h>

void multiply(int a[][32], int b[][32], int size, int c[][32])
{
    for (int i = 0; i < size; ++i)
    {
        for (int j = 0; j < size; ++j)
        {
            c[i][j] = 0;
            for (int k = 0; k < size; ++k)
            {
                c[i][j] += a[i][k] * b[k][j];
            }
        }
    }
}

int main()
{
    int N, M;
    int a[32][32] = { 0 };

    scanf("%d %d", &N, &M);
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < N; ++j)
            scanf("%d", &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
    {
        int p[32][32] = {0}, q[32][32] = {0};
        for (int s = 0; s < N; ++s)
            for (int r = 0; r < N; ++r)
                q[s][r] = a[s][r];
        for (int i = 1; i < M; ++i)
        {
            for (int s = 0; s < N; ++s)
                for (int r = 0; r < N; ++r)
                    p[s][r] = q[s][r];
            multiply(p, a, N, q);
        }

        for (int i = 0; i < N; ++i)
        {
            for (int j = 0; j < N; ++j)
                printf("%d ", q[i][j]);
            printf("\n");
        }
    }

    return 0;
}
发布了183 篇原创文章 · 获赞 40 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/liulizhi1996/article/details/103912018