错误:
//问题:在没有改良的代码中每次换列的时候上面或是下面都有零,发现原来是如果直接加上或减去dx[d]
//会跳过a[1][某一列]或a[n][某一列],所以需要对代码进行改进;
思路:
//方法:
//1、在代码中如果这个蛇形是从下向上填数的时候,就是x++让他向下移动一行,那么下次x减去1刚好在第i个数的位置
//2、从上向下填数同理,x--;
代码:
//问题:在没有改良的代码中每次换列的时候上面或是下面都有零,发现原来是如果直接加上或减去dx[d]
//会跳过a[1][某一列]或a[n][某一列],所以需要对代码进行改进;
//方法:
//1、在代码中如果这个蛇形是从下向上填数的时候,就是x++让他向下移动一行,那么下次x减去1刚好在第i个数的位置
//2、从上向下填数同理,x--;
#include<bits/stdc++.h>
using namespace std;
int dx[] = {1,-1}; //方向矩阵
int a[10001][19001]; //蛇形矩阵
int main(){
int n; cin >> n;
int i = 1,x = 1, y = n, d = 0;
while(i <= n*n){
a[x][y] = i++; //填数
int sx = x + dx[d]; //预判下次位置
if(sx > n || sx < 1){ //判断是否越界
d = !d; //x改变方向
y--; //改变y方向
//调整偏移
if(d) x++;
else x--;
}
x += dx[d];
}
//输出
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
cout << a[i][j] << " ";
}
cout << endl;
}
return 0;
}