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;
}
标签:平移,1097,PAT,int,delta,矩阵,99,pMat,Basic
From: https://www.cnblogs.com/tacticKing/p/17321082.html