达不到期望输出***1***2***3***4***5***6***7***8***9**10 **36**37**38**39**40**41**42**43**44**11 **35**64**65**66**67**68**69**70**45**12 **34**63**84**85**86**87**88**71**46**13 **33**62**83**96**97**98**89**72**47**14 **32**61**82**95*100**99**90**73**48**15 **31**60**81**94**93**92**91**74**49**16 **30**59**80**79**78**77**76**75**50**17 **29**58**57**56**55**54**53**52**51**18 **28**27**26**25**24**23**22**21**20**19
时间: 2023-07-06 13:36:40 浏览: 152
非常抱歉,之前的程序确实有问题,以下是修正后的程序:
```c++
#include <iostream>
#include <iomanip>
using namespace std;
const int MAXN = 10;
int a[MAXN][MAXN];
int main() {
int n;
cin >> n;
int k = 1;
int x = 0, y = 0;
a[x][y] = k++;
while (k <= n * n) {
while (y + 1 < n && !a[x][y + 1]) {
a[x][++y] = k++;
}
while (x + 1 < n && !a[x + 1][y]) {
a[++x][y] = k++;
}
while (y - 1 >= 0 && !a[x][y - 1]) {
a[x][--y] = k++;
}
while (x - 1 >= 0 && !a[x - 1][y]) {
a[--x][y] = k++;
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << setw(4) << (a[i][j] ? to_string(a[i][j]) : "*");
}
cout << endl;
}
return 0;
}
```
在这个程序中,我们首先输入 n 的值,然后创建一个 n 行 n 列的二维数组 a,用于存储蛇形矩阵。接着,我们使用一组 while 循环来按照蛇形的方式将数字填入二维数组中,直到填满为止。其中,变量 x 和 y 用于记录当前数字所在的行和列,变量 k 用于记录当前已经填入的数字。在填数时,我们首先向右填数,当无法再向右填数时,再向下、向左、向上依次填数,直到填满为止。最后,我们按照要求输出蛇形矩阵即可。
阅读全文