虽然过了,但还是有疑问,求助大佬。
查看原帖
虽然过了,但还是有疑问,求助大佬。
746818
wow12138楼主2022/7/28 22:50
#include<bits/stdc++.h>
using namespace std;
int main(){
   int n,n2;
   cin>>n;
   n2=n*n;
   int a[n+2][n+2],b[n+1],c[n+1];//a[i][j]代表所求数表中数,b[i]、c[i]分别代表i所在的行、列 
   for(int i=1;i<=n;i++){
   	for(int j=1;j<=n;j++){
   		a[i][j]=0;
   	}
   }
   a[1][(n+1)/2]=1;
   b[1]=1;
   c[1]=(n+1)/2;
   for(int i=2;i<=n2;i++){
   	if(b[i-1]==1&&c[i-1]!=n){
   		b[i]=n;
   		c[i]=c[i-1]+1;
   	}
   	else if(b[i-1]!=1&&c[i-1]==n){
   		b[i]=b[i-1]-1;
   		c[i]=1;
   	}
   	else if(b[i-1]==1&&c[i-1]==n){
   		b[i]=2;
   		c[i]=n;
   	}
   	else{
   		if(a[b[i-1]-1][c[i-1]+1]==0){
   			b[i]=b[i-1]-1;
   			c[i]=c[i-1]+1;
   		}
   		else{
   			b[i]=b[i-1]+1;
   			c[i]=c[i-1];
   		}
   	}
   	a[b[i]][c[i]]=i;
   }
   for(int i=1;i<=n;i++){
   	for(int j=1;j<=n;j++){
   		cout<<a[i][j]<<" ";
   	}
   	cout<<endl;
   }
return 0;}
//n=3时运转正常,但n=5时在填入16时,a[1][1]被赋值为了2,然后就全错了。
2022/7/28 22:50
加载中...