1 条题解

  • 0
    @ 2025-4-12 22:06:17

    C :

    #include<stdio.h>
    #include<string.h>
    int main()
    {
    	int a[21][21];
    	memset(a,0,sizeof(a));
    	int n;
    	scanf("%d",&n);
    	int count=1,e=0;
    	int left=0,right=n;
    	while(e<=n/2)
    	{
    		for(int i=left;i<right;i++)
    		{
    			a[e][i]=count++;
    		}
    		for(int i=left+1;i<right;i++)
    		{
    			a[i][n-1-e]=count++;
    		}
    		for(int i=right-2;i>=left;i--)
    		{
    			a[n-1-e][i]=count++;
    		}
    		for(int i=right-2;i>=left+1;i--)
    		{
    			a[i][e]=count++;
    		}
    		left++,right--,e++;
    	} 
    	for(int i=0;i<n;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			printf("%-4d",a[i][j]);
    			
    			
    		}
    		
    		printf("\n");
    	}
    	return 0;
    } 
    

    C++ :

    #include <iostream>
    #include <iomanip>
    using namespace std;
    int M[20][20];
    int k=1;
    void f(int x,int len)//从坐标x,x这个位置,填充一圈,圈长为len 
    {
    	int i;
    	if(len<=0) return;
    	if(len==1) 
    		M[x][x]=k;
    	else
    	{
    		for(i=0;i<len-1;i++)
    			M[x][x+i]=k++;
    		for(i=0;i<len-1;i++)
    			M[x+i][x+len-1]=k++;
    		for(i=len-1;i>0;i--)
    			M[x+len-1][x+i]=k++;
    		for(i=len-1;i>0;i--)
    			M[x+i][x]=k++;
    	}
    	f(x+1,len-2);
    }
    int main()
    {
    	int n,i,j;
    	cin>>n;
    	f(0,n);
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<n;j++)
    		{
    			cout<<left<<setw(4)<<M[i][j];
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    
    
    • 1

    信息

    ID
    2838
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者