2 条题解
-
-1
这道题就是螺旋矩阵呀
言归正传,这道题其实是一道基本深搜。
重点说一下输出,它说每个数字输出时场宽设置为3,就意味着每个数字输出时占3个字符的长度,不够的空格代替。因此,每个数字输出时由
3-数字的位数个空格+数字组成
。因此我们可以先求出数字的位数再根据上文公式输出。代码为:
int d = 0 , x = f[i][j];//d代表数字位数,x代表当前数字(临时) while (x > 0) { d++; x /= 10; } for (int i = 1 ; i <= 3 - d ; i++) cout << " "; cout << f[i][j];
完整代码:
#include <bits/stdc++.h> using namespace std; int n , m , f[10][10] , b[10][10] , next[4][2] = {{0 , 1} , //遍历的顺序也很重要 {1 , 0} , {0 , -1} , {-1 , 0}}; void dfs(int x , int y , int number) { f[x][y] = number; b[x][y] = 1; number++; for (int i = 0 ; i < 4 ; i++) { int nx = x + next[i][0] , ny = y + next[i][1]; if (nx >= 1 && nx <= n && ny >= 1 && ny <= m && b[nx][ny] == 0) { return dfs(nx , ny , number); } } return; } int main() { cin >> n >> m; dfs(1 , 1 , 1); for (int i = 1 ; i <= n ; i++) { for (int j = 1 ; j <= m ; j++) { int d = 0 , x = f[i][j]; while (x > 0) { d++; x /= 10; } for (int i = 1 ; i <= 3 - d ; i++) cout << " "; cout << f[i][j]; } cout << endl; } return 0; }
--------------------------------------------------UPDATD-2022.12.25-------------------------------------------------------
设置场宽其实一句话就行了,不用我说的那么麻烦。
我当时不会用printfprintf("%3d" , f[i][j]);
-
-3
写题解请注意 鼓励大家写题解,但注意题解格式。
题解一定要有思路解析或代码注释,能否让别人理解你的思路
也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。
给代码两端加上这个会舒服一些
```cpp
你的代码
```
</span>
这个点在键盘的左上角tab上面那个键,注意切换输入法
#include<iostream> using namespace std; int main() { int n; cin>>n;//这是一个注释 return 0; }
请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。
抄袭题解一经发现直接取消成绩。
题解被删除的可能
- 代码不符合格式规范
- 没有思路讲解或者没有注释,
- 无意义的题解
大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。
- 1
信息
- ID
- 583
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 6
- 标签
- 递交数
- 48
- 已通过
- 17
- 上传者