蛇形填数
来源:互联网 发布:小佳娱乐网源码 编辑:程序博客网 时间:2024/05/23 19:14
蛇形填数
时间限制: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 1
6 9 2
5 4 3
这个问题是让我们像蛇一样转圈填数的,所以这里一圈为一次循环,在这个循环里,右边,下边,左边,上边 每一条边又是一个简单的循环
for(d=0;d<=(n-1)/2;d++) 确定循环数,即圈数,一个数亦可以视为一圈 { while(y+1<n && a[x][y+1]==0) 上边,为0的才需要填数,填过的不用再填 a[x][++y]=++sum; while(x+1<n && a[x+1][y]==0) 右边 a[++x][y]=++sum; while(y-1>=0 && a[x][y-1]==0) 下边 a[x][--y]=++sum; while(x-1>=0 && a[x-1][y]==0) 左边 a[--x][y]=++sum; }
然后再用一个嵌套循环输出这个二维数组即可~~#include <stdio.h>int main(){ int a[102][102]={0},n,x=0,y,sum=1,d=0; scanf("%d",&n); y=n-1; a[x][y]=1; for(d=0;d<=(n-1)/2;d++) { while(y+1<n && a[x][y+1]==0) a[x][++y]=++sum; while(x+1<n && a[x+1][y]==0) a[++x][y]=++sum; while(y-1>=0 && a[x][y-1]==0) a[x][--y]=++sum; while(x-1>=0 && a[x-1][y]==0) a[--x][y]=++sum; } for(x=0;x<n;x++) { for(y=0;y<n;y++) printf("%6d",a[x][y]); printf("\n"); }}
0 0
- 蛇形填数
- 算法:蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数问题
- 蛇形填数
- C++蛇形填数
- 蛇形填数
- 蛇形填 数
- 蛇形填数
- NYOJ - 蛇形填数
- 蛇形填数
- 各种蛇形填数
- 蛇形填数
- 蛇形填数
- ACM-蛇形填数
- 蛇形填数
- 文字设置下划线及利用系统自带的浏览器访问页面
- strstr()的实现
- OSGearth学习(一)
- 第十一周项目6(4)输出1000以内的所有素数
- 阿里云oss Multipart Upload 中每个part的E-tag(即MD5)求法
- 蛇形填数
- [转载]AFNetWorking 2.0 中文文档 使用说明
- POJ 1329 Circle Through Three Points(求三角形的外接圆)
- 有关Entity Framework的数据模型的操作
- Inno打包程序相关
- linux 启动流程与文件系统管理
- 求连续子数组的最大乘积
- 欧拉环、欧拉路径的判定和求法
- HomeHttp 是一个免费的网站反向代理服务