4AC 6RE,n>28时程序输出为空,求大佬指点
查看原帖
4AC 6RE,n>28时程序输出为空,求大佬指点
579007
qiandixiaoyuer楼主2021/11/27 13:55
#include <stdio.h>
#include <string.h>
int a[41][41]={0};//幻方
int b[41][2]={0};//b[x][0]为x所处的行数,b[x][1]代表x所处的列数
void f(int k,int n);//对大小为n的幻方,基于k-1的位置,填入k
int main()
{
	int n;
	scanf("%d",&n);
	int t=(n+1)/2;
	b[1][0]=1;
	b[1][1]=t;
	a[1][t]=1;
	for(int i=2;i<=n*n;i++){
		f(i,n);//将i填入幻方
		printf("%d ",a[b[i][0]][b[i][1]]);//用于本人调试,调试发现,n小于784^0.5=28时,程序可以正常运行,n>28时,这一行代码最多输出到790,后续的printf输出不了值.
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			printf("%d ",a[i][j]);
		}
		putchar('\n');
	}
	return 0;
}
void f(int k,int n){
	if(b[k-1][0]==1&&b[k-1][1]!=n){
		b[k][0]=n;
		b[k][1]=b[k-1][1]+1;
	}
	else if(b[k-1][1]==n&&b[k-1][0]!=1){
		b[k][1]=1;
		b[k][0]=b[k-1][0]-1;
	}
	else if(b[k-1][0]==1&&b[k-1][1]==n){
		b[k][0]=b[k-1][0]+1;
		b[k][1]=b[k-1][1];
	}
	else if(b[k-1][0]!=1&&b[k-1][1]!=n){
		if(a[b[k-1][0]-1][b[k-1][1]+1]==0){
			b[k][0]=b[k-1][0]-1;
			b[k][1]=b[k-1][1]+1;
		}
		else{
			b[k][0]=b[k-1][0]+1;
			b[k][1]=b[k-1][1];
		}
	}
	a[b[k][0]][b[k][1]]=k;
}

RE了,求求大佬救救孩子,实在想不明白哪里出了问题

2021/11/27 13:55
加载中...