蛇形

来源:互联网 发布:gv直播软件 编辑:程序博客网 时间:2024/06/11 09:44

 Give you many positive integer N (N<=23), for each N, just output N*(N+1)/2 integers in a single line, separated by space. (Don't ask me why.) For each N, the output line contains integers from 1 to N, and each just once. Again, do not ask me why, thank you. I'm so busy. But I can tell you a secret, the output has relationship with number triangle. As:(N=3)

                   1

                   2   6

                   3   4   5

See the sample for more information.

输入

a positive integer N (N<=23). 

输出

For each N, output N*(N+1)/2 integers in a single line, separated by a blank space. 

样例输入

3 4 2 6

样例输出

1 2 6 3 4 5 1 2 9 3 10 8 4 5 6 7 1 2 3 1 2 15 3 16 14 4 17 21 13 5 18 19 20 12 6 7 8 9 10 11

#include <stdio.h>int main(){int n,y,x;while (scanf("%d", &n) != EOF) {int a[23][23]={0},m=1;for(y=n;y>=1;y--){a[1][y]=m++;    }    for(x=2;x<=n;x++) {a[x][1]=m++;    }    x=x-1;    y=y+1;    while(m<=(n*(n+1)/2)){for(;x>=1 && y<=n;){if(a[--x][++y]==0){   a[x][y]=m++;}else{break;}}if (m > n*(n+1)/2) break;        //下面的步骤是因为虽然break,x和y还是多加了一次,要注意。x = ++x;y=y-1;         //for(;y>=1;){    //for里面第一个数可以没有,不用其他的数字表示了。if(a[x][--y]==0){a[x][y]=m;m++; } else{break;}}if (m > n*(n+1)/2) break;y=y+1;for(;x<=n;){if(a[++x][y]==0){a[x][y]=m++;}else{break;}}if (m > n*(n+1)/2) break;    x=x-1;    }       for(y=n;y>=1;y--){for(x=1;x<=n-y+1;x++){if (y == 1 && x == n)printf("%d\n",a[x][y]);elseprintf("%d ",a[x][y]);}  }}return 0;}

0 0
原创粉丝点击