又是元气满满地踩bug。。

开始:思路是依照题意交换即可

然后:发现初始值会因其交换而改变,决定做两个二维数组一个储存一个赋值

接着:遇到溢出现象,猛然发现大bug,程序是从新数组中间的跑出来的,也就是说临界值之前的没有赋值。。。决定以if判断是否为最后一个,那么从头开始赋值。

最后:看似正确(看错了)其实是换位错位,和题目要求的结果都不一样。。。

a

陷入沉思!

然后打开百度。。

发现更改为%即可解决多次”进位”(姑且这么称作吧)。于是又修改了几次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。