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)
输出输出结果是蛇形方陈。
样例输入
样例输出
没什么太多的技巧,就是一个模拟解决的,我是写了4个函数,现在想想还有更简单的办法,当时想复杂了,水平有限嘛
蛇形填数
时间限制: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; }
相关文章推荐