您的位置:首页 > 其它

33 蛇形填数

2015-08-02 16:58 323 查看


蛇形填数

时间限制: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


变态的蛇形填数,恶心的循环控制............

很久以前就见识过这个题,只是无从下手啊,好在现在学的东西多了点,敢做了....然后开始敲代码,需要用个二维数组来存储每个值,然后双循环输出.....

第一次做这样的题,也是无从下手,循环调了半天,才总算运行成功,提交 ac 了........这个题完全是循环控制格式的题,基本上不需要思路,唯一需要注意的是,需要多个循环分别控制二维数组的填数顺序,有四条边,所以需要四个,还需要来回转圈打表,所以外层也需要一个循环...............

#include<stdio.h>
#include<string.h>
int x[105][105];
int main()
{
int n,i,j,k,l,s;;
while(~scanf("%d",&n))
{
s=1;
for(i=0;i<n;++i)//控制打的长度以及次数.....
{
for(j=i;j<n-i;++j)//控制 从上到下
{
x[j][n-i-1]=s++;
}
for(j=n-i-2;j>=i;--j)//控制 从右到左
{
x[n-i-1][j]=s++;
}
for(j=n-i-2;j>=i;--j)//控制 从下到上
{
x[j][i]=s++;
}
for(j=i+1;j<n-i-1;++j)//控制 从左到右
{
x[i][j]=s++;
}
}
for(i=0;i<n;++i)
{
for(j=0;j<n-1;++j)
{
printf("%d ",x[i][j]);
}
printf("%d\n",x[i][j]);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: