1. 程式人生 > 其它 >PTA 矩陣列平移

PTA 矩陣列平移

給定一個 n×n 的整數矩陣。對任一給定的正整數 k<n,我們將矩陣的偶數列的元素整體向下依次平移 1、……、k、1、……、k、…… 個位置,平移空出的位置用整數 x 補。你需要計算出結果矩陣的每一行元素的和。

輸入格式:

輸入第一行給出 3 個正整數:n(<100)、k(<n)、x(<100),分別如題面所述。

接下來 n 行,每行給出 n 個不超過 100 的正整數,為矩陣元素的值。數字間以空格分隔。

輸出格式:

在一行中輸出平移後第 1 到 n 行元素的和。數字間以 1 個空格分隔,行首尾不得有多餘空格。

輸入樣例:

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
 

輸出樣例:

440 399 369 421 302 386 428
 

樣例解讀

需要平移的是第 2、4、6 列。給定 k=2,應該將這三列順次整體向下平移 1、2、1 位(如果有更多列,就應該按照 1、2、1、2 …… 這個規律順次向下平移),頂端的空位用 99 來填充。平移後的矩陣變成:

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

#include<bits/stdc++.h>
using
namespace std; int a[105][105],b[105][105]; int main() { int n,k,x,i,j; int c=1,sum=0; cin>>n>>k>>x; for(i=1;i<=n;i++){ for(j=1;j<=n;j++){ cin>>a[i][j]; } } for(i=1;i<=n;i++){ for(j=1;j<=n;j++){
if(j%2==0){ c=j/2; c=c%k; if(c==0) c=k; if(c<=k&&i+c<=n){ b[i+c][j]=a[i][j]; } for(int t=1;t<=c;t++){ b[t][j]=x; } }else{ b[i][j]=a[i][j]; } } } int f=0; for(i=1;i<=n;i++){ sum=0; for(j=1;j<=n;j++){ sum+=b[i][j]; } if(f==0){ cout<<sum; f=1; }else{ cout<<" "<<sum; } } return 0; }