7 条题解

  • 0
    @ 2024-4-12 17:07:28
    //
    #include <iostream>
    #include <cstdio>
    
    using namespace std;
    int res[100][100];
    
    int main()
    {
    	int m,n;
    	cin>>m>>n;
    	int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
    	//偏移量
    	for(int x=0,y=n-1,d=0,k=1; x<m,y<n,k<=m*n ;k++)
    	{
    		res[x][y]=k;
    		int a=x+dx[d],b=y+dy[d];
    		if(a<0||a>=m||b>=n||b<0||res[a][b])
    //res[a][b]是重复格子的情况,初始化数组为零,如果走过一遍格子会有数字,需要转弯
    		{
    			d=(d+1)%4;
    		a=x+dx[d],b=y+dy[d];
    	}//看是否撞墙或者走到重复的格子
    		x=a,y=b;//没有的话就更新位置
    	}
    	
    	for(int i=0;i<m;i++)
    	{
    		for(int j=0;j<n;j++)
    		{
    			printf("%5d",res[i][j]);
    		}
    		cout<<endl;
    	}
    	return 0;
    }
    

    信息

    ID
    78
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    682
    已通过
    175
    上传者