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
    标签
    递交数
    16
    已通过
    8
    上传者