蛇形填数
来源:互联网 发布:权力的游戏大麻雀知乎 编辑:程序博客网 时间:2024/06/04 10:05
#include<stdio.h>
int main()
{
int a[100][100];
int x,y;int sum=1;
int n;
scanf("%d",&n);
x=0,y=n-1;
a[0][n-1]=1;
while(sum<n*n)//控制输出的数的个数(从1开始输出一直到n*n个数结束)
{
while(x<n-1&&a[x+1][y]==0)//从右上角开始 1;向下走;走到 x=n-1 (x控制上下走的次数)
a[++x][y]=++sum;
while(y>0&&a[x][y-1]==0)//向左走; 走到 y=0; (y 控制左右走的次数)
a[x][--y]=++sum;
while(x>0&&a[x-1][y]==0) //向上走;走到 x=0;
a[--x][y]=++sum;
while(y<n-1&&a[x][y+1]==0) //向右走 ; 走到 y=n-1;
a[x][++y]=++sum;
}
int i,j;
for(i=0;i<=n-1;i++)
{
for(j=0;j<=n-1;j++)
printf("%4d",a[i][j]);
printf("\n");
}
//while(1);
return 0;
}
以下分析内容网上摘抄的!!
//分析:告诉我们一个n后,我们就知道这个蛇形填数填到最后一个数必是n*n,
//所以循环的截止条件是<=n*n 。循环的过程是在一个二维数组中从起点开始向下走,
//到边界后又向左走,到边界后又向上走,再向右走,再循环下去。
//定义一个大的二维数组时,最好是定义到main()函数外,此题最好用memset()函数对数组进行初始化,每个数组成员赋初值0,
//这样可以在循环填数时,也作为一个边界条件。
//
- 蛇形填数
- 算法:蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数问题
- 蛇形填数
- C++蛇形填数
- 蛇形填数
- 蛇形填 数
- 蛇形填数
- NYOJ - 蛇形填数
- 蛇形填数
- 各种蛇形填数
- 蛇形填数
- 蛇形填数
- ACM-蛇形填数
- 蛇形填数
- VMware安装64位系统注意事项
- 前端面试宝典——来自cnblog
- poj2985线段树求第k大的数(并查集)
- 黑马程序员--------------学习JAVA反射(Reflection)
- jQuery css() 方法
- 蛇形填数
- ThinkPHP 3.2.2 路由重写BUG ,修正方法
- grunt任务配置教程
- 102_widget的点击事件
- oracle的ora提示都是问号
- 关于java关键字synchronized的一些心得体会
- The application may be doing too much work on its main thread.
- POJ 题目3624 Charm Bracelet(动态规划 01背包)
- Android Service创建USB HOST通信