2 条题解

  • 1
    @ 2025-5-10 11:29:49
    #include <bits/stdc++.h>
    using namespace std;
    #define LL long long
    const int N = 1e2 + 10;
    const int INF = 0x3f3f3f3f;
    int n , a[N][N];
    void f( int x )
    {
    	if ( x == n )
    	{
    		return;
    	}
    	for ( int i = 1 ; i <= x ; i++ )
    	{
    		a[ ( n - x ) / 2 ][ ( n - x ) / 2 + i ] = 1;
    	}
    	for ( int i = 1 ; i <= x ; i++ )
    	{
    		a[ ( n - x ) / 2 + i ][ ( n - x ) / 2 ] = 2;
    	}
    	for ( int i = 1  ; i <= x ; i++ )
    	{
    		a[ n + 1 - ( n - x ) / 2 ][ ( n - x ) / 2 + i ] = 3;
    	}
    	for ( int i = 1 ; i <= x ; i++ )
    	{
    		a[ ( n - x ) / 2 + i ][ n + 1 - ( n - x ) / 2 ] = 4;
    	}
    	f( x + 2 );
    }
    int main()
    {
        cin >> n;
        if ( n % 2 == 1 )
    	{
    		f(1);
    	}
        else 
    	{
    		f(2);
    	}
        for ( int i = 1 ; i <= n ; i++ )
    	{
    		for ( int j = 1 ; j <= n ; j++ )
    		{
    			cout << a[i][j] << " ";
    		}
    		cout << endl;
    	}
    	return 0;
    }
    //菜鸟驿站
    //老六专属
    • 1
      @ 2025-4-20 22:25:53

      递归+超难的模拟(一堆算式)

      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e2+5,INF=0x3f3f3f3f;
      typedef long long LL;
      int n,a[N][N];
      void f(int x){
      	if(x==n)return;
      	for(int i=1;i<=x;i++)a[(n-x)/2][(n-x)/2+i] = 1;
      	for(int i=1;i<=x;i++)a[(n-x)/2+i][(n-x)/2] = 2;
      	for(int i=1;i<=x;i++)a[n+1-(n-x)/2][(n-x)/2+i] = 3;
      	for(int i=1;i<=x;i++)a[(n-x)/2+i][n+1-(n-x)/2] = 4;
      	f(x+2);
      }
      int main()
      {
          cin>>n;
          if(n%2==1)f(1);
          else f(2);
          for(int i=1;i<=n;i++){
      		for(int j=1;j<=n;j++)cout<<a[i][j]<<" ";
      		cout<<endl;
      	}
      }
      
      

      特别要注意边长为奇数的方阵和偶数的递归函数是一样的我后来才发现的

      • 1

      信息

      ID
      1037
      时间
      1000ms
      内存
      128MiB
      难度
      8
      标签
      递交数
      15
      已通过
      7
      上传者