您的位置:首页 > 其它

NYOJ 33-蛇形填数

2013-07-27 00:30 423 查看
点击打开链接


蛇形填数

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


没什么太多的技巧,就是一个模拟解决的,我是写了4个函数,现在想想还有更简单的办法,当时想复杂了,水平有限嘛

#include<stdio.h>
int array[100][100] = {0};
int up();
void left();
void right();
int down();
int num = 1 , x , y , n;

int main()
{
scanf("%d" , &n);
for(y = n - 1; ;)
{
if(down() == 1)
break;
y--;
left();
x--;
if(up() == 1)
break;
y++;
right();
x++;

}
for(x = 0 ; x < n ; x++)
{
for(y = 0 ; y < n ; y++)
printf("%d " , array[x][y]);
printf("\n");
}
return 0;
}
int up()
{
int i;

for(i = x ; array[x][y] == 0 && x >= 0 ; x --)
{
array[x][y] = num++;
}
x++;
if(array[x][y + 1] != 0)
return 1;
else
return 0;
}
void left()
{
int i;
for(i = y ; array[x][y] == 0 && y >= 0 ; y--)
{
array[x][y] = num ++;
}
y++;
}
void right()
{
int i;
for(i = y ; array[x][y] ==0 && y < n ; y++)
{
array[x][y] = num++;
}
y--;
}
int down()
{
int i;
for(i = x ; array[x][y] == 0 && x < n ; x++)
{
array[x][y] = num++;
}
x--;
if(y == 0 || array[x][y - 1] != 0 )
return 1;
else
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: