蛇形填数
来源:互联网 发布:怎么接淘宝家具安装 编辑:程序博客网 时间: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
- 蛇形填数
- 算法:蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数问题
- 蛇形填数
- C++蛇形填数
- 蛇形填数
- 蛇形填 数
- 蛇形填数
- NYOJ - 蛇形填数
- 蛇形填数
- 各种蛇形填数
- 蛇形填数
- 蛇形填数
- ACM-蛇形填数
- 蛇形填数
- ECMAScript6标准异步操作和Async函数
- ubuntu常见问题与设置(by 星空武哥)
- QStandardItemModel的data线程安全
- FOF基金的七大投资策略
- python入门--数据类型
- 蛇形填数
- 数据结构与算法之最短路径--迪杰斯特拉算法
- FragmentTabHost切换Fragment时避免重复加载UI(ViewPager切换Fragment时也适用)
- LeetCode-303. Range Sum Query - Immutable
- getifaddr函数及相关结构体总结
- Java面向对象(二)
- CS231n--assignment 1--KNN
- CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout全解析
- 创建多线程的三种方式