注意以下几点:
1.将得到的各个数据单独储存起来,一次一次操作,一次循环直接移动完成比较麻烦
2.先给数组的每一偶数列进行元素的移动,再给偶数列的最上面k个元素赋值。
3.将数组偶数列向下平移的位数用一个数组储存(b[j]即是第j列的移动位),方便操作
#include<stdio.h>
int main(void){
int n,k,x,flag=1;
scanf("%d%d%d",&n,&k,&x);
int a[n][n],b[n]={0};
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
scanf("%d",&a[i][j]);//*(a+i)+j
}
}
for(int i=1;i<n;i+=2){
b[i]=flag++;
if(flag==k+1){
flag=1;
}
}
for(int i=n-1;i>=0;i--){
for(int j=0;j<n;j++){
if(j%2==1){
if(i<=b[j]-1){
continue;
}
a[i][j]=a[i-b[j]][j];
}
}
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(j%2==1){
if(i<b[j]){
a[i][j]=x;
}
}
}
}
for(int i=0;i<n;i++){
int sum=0;
for(int j=0;j<n;j++){
sum+=a[i][j];
}
printf("%d ",sum);
sum=0;
}
// printf("\n\n");
// for(int i=0;i<n;i++){
// for(int j=0;j<n;j++){
// printf("%d ",a[i][j]);
// }
// printf("\n");
// }
}