給定一個𝑛×𝑛n×n的整數矩陣。對任一給定的正整數𝑘<𝑛k<n,我們將矩陣的奇數行的元素整體向右依次平移1、……、𝑘、1、……、𝑘、……1、……、k、1、……、k、……個位置,平移空出的位置用整數𝑥x補。你需要計算出結果矩陣的每一列元素的和。
輸入格式:
輸入第一行給出 3 個正整數:𝑛(<100)、𝑘(<𝑛)、𝑥(<100)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
Copy
輸出樣例:
529 481 479 263 417 342 343
Copy
樣例解讀
需要平移的是第 1、3、5、7 行。給定 ,應該將這三列順次整體向右平移 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
代碼:
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main(){int n,k,x;cin>>n>>k>>x;int a[200][200],b[200][200];for(int i=0;i<n;++i){for(int j=0;j<n;++j){cin>>a[i][j];}} int t=1;//移動個數int sum[10050]={0};for(int i=0;i<n;++i){if(i%2==0){int q;for(int j=0;j<t;++j){b[i][j]=x;q=j;}for(int j=0;j<n-t+1;++j){b[i][++q]=a[i][j];}if(t<k)t++;//增加x個數else if(t==k)t=1;//到k個后變為1} else{for(int j=0;j<n;++j){b[i][j]=a[i][j];}}}// for(int i=0;i<n;++i){// for(int j=0;j<n;++j){// cout<<b[i][j]<<" ";// }cout<<endl;// }for(int j=0;j<n;++j){for(int i=0;i<n;++i){sum[j]+=b[i][j];}}for(int i=0;i<n;++i){cout<<sum[i];if(i!=n-1)cout<<" ";}
return 0;
}
?