方阵循环右移于其各种踩bug23333
又是元气满满地踩bug。。
开始:思路是依照题意交换即可
然后:发现初始值会因其交换而改变,决定做两个二维数组一个储存一个赋值
接着:遇到溢出现象,猛然发现大bug,程序是从新数组中间的跑出来的,也就是说临界值之前的没有赋值。。。决定以if判断是否为最后一个,那么从头开始赋值。
最后:看似正确(看错了)其实是换位错位,和题目要求的结果都不一样。。。
陷入沉思!
然后打开百度。。
发现更改为%即可解决多次”进位”(姑且这么称作吧)。于是又修改了几次for循环的条件得以解决所有问题
我太难了。
下面是更改了许多次的代码。。。
#include<stdio.h>
int main(){
int m,n,i,k,j;
scanf("%d %d",&m,&n);
int a[n][n];
int b[n][n];
//intput
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
//nswitch
for(i=0;i<n;i++){
for(j=0;j<n;j++){//控制a数组从第一个开始输出。
//其中,n-m+j是被赋值的列的位置,当其等于n-1时应为复制到该列最后一个,应切换!
b[i][(j+m)%n]=a[i][j];//for临界及其之后的
}
}
//output
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d",b[i][j]);
printf(" ");
if(j==n-1)printf("\n");
}
}
}
得出:做题要多思考其逻辑顺序,不要人云亦云,将题目分解为自己已知,与未知,将其一步一步的以案例分析,从一到一百,通过实际例子,分析其规律于变化情况,进而改变过程。不断修正。
一定要搞清楚所有的过程,不能似是而非,否则一定会出现难以想象的bug。