蛇形填数
来源:互联网 发布:淘宝怎么切换类目 编辑:程序博客网 时间:2024/05/18 01:08
#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)
{
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,
//这样可以在循环填数时,也作为一个边界条件。
//
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)
{
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,
//这样可以在循环填数时,也作为一个边界条件。
//
0 0
- 蛇形填数
- 算法:蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数
- 蛇形填数问题
- 蛇形填数
- C++蛇形填数
- 蛇形填数
- 蛇形填 数
- 蛇形填数
- NYOJ - 蛇形填数
- 蛇形填数
- 各种蛇形填数
- 蛇形填数
- 蛇形填数
- ACM-蛇形填数
- 蛇形填数
- 自己学到的C++一些技巧记录
- 网络流dinic算法
- eclipse jee配置jetty的两种方法
- 完全背包问题
- 不使用第三个变量,实现两个数交换
- 蛇形填数
- SpringMVC vs Struts
- 出栈和入栈方向
- Hdu 1907 && Hdu2509 (nim博弈的相反胜况)
- 1408041943-hd-月之数.cpp
- 想法很重要,但是动手更重要,发现问题并且解决问题
- HDU-1002-大数加法
- SEL和IMP
- 4 Annotated Endpoints