蛇形填数

来源:互联网 发布:怎么接淘宝家具安装 编辑:程序博客网 时间:2024/04/30 00:13

蛇形填数

时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
输入
直接输入方陈的维数,即n的值。(n<=100)
输出
输出结果是蛇形方陈。
样例输入
3
样例输出
7 8 16 9 25 4 3
//错误代码:
#include<iostream>using namespace std;int main(){int A[101][101]={0};int n;cin>>n;int i=0,j=n,num=1;while(num<=n*n){while(i<n){              //这里存在逻辑错误,当第二圈的时候回出现无限的死循环。因为第二圈的时候i<n恒成立 
if(A[i+1][j]==0){ //应该将if语句里的判断条件一起形成循环条件。A[++i][j]=num++;}}while(j>1){if(A[i][j-1]==0){A[i][--j]=num++;}}while(i>1){if(A[i-1][j]==0){A[--i][j]=num++;}}while(j<n){if(A[i][j+1]==0){A[i][++j]=num++;}}}for(i=1;i<=n;i++){for(j=1;j<=n;j++){cout<<A[i][j]<<" ";}cout<<endl;}return 0;} 
正确代码:
#include<iostream>using namespace std;int main(){int data[100][100]={0};int n;cin>>n;int x=0 , y = n-1 , cnt = 1;data[x][y] = cnt;while(cnt < n*n){//向下走while(x+1<n && !data[x+1][y]){data[++x][y] = ++cnt;}//向左走while(y-1>=0 && !data[x][y-1]){data[x][--y] = ++cnt;}//向上走while(x-1 >=0 && !data[x-1][y]){data[--x][y] = ++cnt;}//向右走while(y+1 <n && !data[x][y+1]){data[x][++y] = ++cnt;}}for(int i=0; i<n; ++i){for(int j=0; j<n; ++j){cout << data[i][j] << " ";}cout << endl;}return 0;}
0 0