PAT Basic 1097. 矩阵行平移

发布时间 2023-04-15 14:27:00作者: 十豆加日月

PAT Basic 1097. 矩阵行平移

1. 题目描述:

给定一个 \(n×n\) 的整数矩阵。对任一给定的正整数 \(k<n\),我们将矩阵的奇数行的元素整体向右依次平移 \(1、……、k、1、……、k、……\) 个位置,平移空出的位置用整数 \(x\) 补。你需要计算出结果矩阵的每一列元素的和。

2. 输入格式:

输入第一行给出 3 个正整数:\(n\)\(<100\))、\(k\)\(<n\))、\(x\)\(<100\)),分别如题面所述。

接下来 \(n\) 行,每行给出 \(n\) 个不超过 100 的正整数,为矩阵元素的值。数字间以空格分隔。

3. 输出格式:

在一行中输出平移后第 1 到 \(n\) 列元素的和。数字间以 1 个空格分隔,行首尾不得有多余空格。

4. 输入样例:

7 2 99
11 87 23 67 20 75 89
37 94 27 91 63 50 11
44 38 50 26 40 26 24
73 85 63 28 62 18 68
15 83 27 97 88 25 43
23 78 98 20 30 81 99
77 36 48 59 25 34 22

5. 输出样例:

529 481 479 263 417 342 343

样例解读

需要平移的是第 1、3、5、7 行。给定 \(k=2\),应该将这三列顺次整体向右平移 1、2、1、2 位(如果有更多行,就应该按照 1、2、1、2、1、2 …… 这个规律顺次向右平移),左端的空位用 99 来填充。平移后的矩阵变成:

99 11 87 23 67 20 75
37 94 27 91 63 50 11
99 99 44 38 50 26 40
73 85 63 28 62 18 68
99 15 83 27 97 88 25
23 78 98 20 30 81 99
99 99 77 36 48 59 25

6. 性能要求:

Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB

思路:

回血题,考察基础IO,按照题意编写即可。

My Code:

#include <stdio.h>
#include <stdlib.h> // malloc header

int main(void)
{
    int n,k,x;
    int delta=0;
    
    scanf("%d%d%d", &n, &k, &x);
    int (*pMat)[n] = (int (*)[n])malloc(sizeof(int) * n * n); // allocate heap memory, pMat is a array pointer
    for(int i=0; i<n; ++i)
    {
        for(int j=0; j<n; ++j)
        {
            scanf("%d", &pMat[i][j]);
            //printf("%d ", pMat[i][j]);
        }
        //printf("\n");
    }
    
    delta = 1;
    for(int i=0; i<n; i+=2)
    {
        for(int j=n-1; j>=delta; --j)
        {
            pMat[i][j] = pMat[i][j-delta];
        }
        for(int j=0; j<delta; ++j)
        {
            pMat[i][j] = x;
        }
        ++delta;
        if(delta > k) delta = 1;
    }
    
    for(int j=0; j<n; ++j)
    {
        int tempSum = 0;
        for(int i=0; i<n; ++i)
        {
            tempSum += pMat[i][j];
        }
        if(!j)
            printf("%d", tempSum);
        else
            printf(" %d", tempSum);
    }
    printf("\n");
    
    free(pMat); // release heap memory
    return 0;
}