求助,洛谷第一个样例n为8,re了,本地没问题,9跑不出来
查看原帖
求助,洛谷第一个样例n为8,re了,本地没问题,9跑不出来
775348
Lkh781109楼主2024/3/7 01:45
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

struct A{
	int n;
	int recorder;
};

int main(){
	int n;
    cin>>n;
    A t[n][n];
	for(int i = 1;i <= n;i ++)
	{
		for(int j = 1;j <= n;j ++)
		{
			t[i][j].n = 0;
			t[i][j].recorder = 0;
		}
	}
	
    int k = 1,i = 1,j = 1,sign = 1;
    t[1][1].n = 1;
    t[1][1].recorder = 1;
    while(k<n*n){
    	k++;
    	int s = k,a = 0;
    	while(s){
    		a++;
    		s/=10;
		}
    	if(sign==1){
    		t[i][++j].n = k;
    		t[i][j].recorder = a;
    		if(j+1>n||t[i][j+1].n!=0)sign = 2;
    		continue;
		}
		else if(sign==2){
			t[++i][j].n = k;
			t[i][j].recorder = a;
			if(i+1>n||t[i+1][j].n!=0)sign = 3;
			continue;
		}
		else if(sign==3){
			t[i][--j].n = k;
			t[i][j].recorder = a;
			if(j-1<1||t[i][j-1].n!=0)sign = 4;
			continue;
		}
		else{
			t[--i][j].n = k;
			t[i][j].recorder = a;
			if(i-1<1||t[i-1][j].n!=0)sign = 1;
			continue;
		}
	}
    
    for(int i = 1;i <= n;i ++)
    {
    	for(int j = 1;j <= n;j ++)
    	{
    		while(t[i][j].recorder<3)
    		{
    			cout<<" ";
    			t[i][j].recorder++;
			}
			cout<<t[i][j].n;
		}
		cout<<endl;
	}
    
	return 0;
}
2024/3/7 01:45
加载中...