7 条题解
-
0
// #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
- 上传者