本地测试全没问题,但是一上传全是wa
查看原帖
本地测试全没问题,但是一上传全是wa
376720
guijianhongyan楼主2020/11/14 17:10
#include<stdio.h>
#include<math.h> 
#include<iostream>
#include<algorithm>
using namespace std;

int main(){
	int pre_r=0,pre_c=0;
	int n;//方阵大小 
	scanf("%d",&n);
	int s=0,num=n*n;//,quan=0;
	int Fz[n+1][n+1]={0};//初始化
	//Fz[pre_r][pre_c]=s;
	int h=n-(n-1);//横着走的次数从第一圈开始,h=n-(要走多少列),此后每次后移一列 
	//奇数有bug ,无法到达最后一圈。 
	int Q;
	if( n%2!=0)
		Q=(n/2)+1;//奇数让圈数正常 
	else Q=(n/2);
	for(int quan=0;quan<Q&&s<num;quan++){
		int c=0,r=0; 
		for(c=pre_c+1;c<=n-quan&&s<num;c++)//横着走,列变 
		{
			if(pre_r==0){//第一圈,不太一样 
				pre_r++;
			}	
				Fz[pre_r][c]=++s;
//			printf("%3d",Fz[pre_r][c]); 
		}
		
		pre_r=pre_r; pre_c=--c;//指向拐角点 1 
		c=0;//复位 
		for(r=pre_r+1;r<=n-quan&&s<num;r++)//竖着走,行变 
		{
			
			Fz[r][pre_c]=++s;
//			printf("%3d",Fz[r][pre_c]);
		}
	
		pre_r=--r; pre_c=pre_c;//指向拐角点 2 
		r=0;//复位
		// h为要走到的列数 
		for(c=pre_c-1;c>=(h)&&s<num;c--)//底 横着走
		{
			Fz[pre_r][c]=++s;
//			printf("%3d",Fz[pre_r][c]);
			
		 } 
		 h++;//后移一列, 有下一圈时用 
		 
		 
		 pre_r=pre_r; pre_c=++c;//c第一次会走到超1左列,加回来 
		 c=0;//复位
		 int x=quan+2;//记上竖走 哪行 
		 for(r=pre_r-1;r>=(x)&&s<num;r--)//上 竖着走 
		{
			Fz[r][pre_c]=++s;
//			printf("%3d",Fz[r][pre_c]);
		}
		pre_r=++r; pre_c=pre_c;
		r=0;//复位		
		//一圈完成 
	} 

	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			printf("%3d",Fz[i][j]); 
		}
		printf("\n"); 
	}
		
	return 0;
}
2020/11/14 17:10
加载中...