当前位置: 代码迷 >> 综合 >> NYOJ852-蛇形填数二
  详细解决方案

NYOJ852-蛇形填数二

热度:0   发布时间:2023-12-13 00:21:24.0

蛇形填数(二)

时间限制: 2000 ms  |  内存限制: 65535 KB
难度: 3
描述
1  2  3  4  5
12 13 14 6
11 15 7
10 8
9
跟蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开
输入
第一行有一个N,表示N组测试数据
接下来每组数据包括一个数字X,表示三角形的边长,0< X <1000
输出
输出之后填好之后的图
样例输入
2
5
4
样例输出
1  2  3  4  5
12 13 14 6
11 15 7
10 8
91  2  3  4
9  10 5
8  6
7

#include <stdio.h>  

main()  
{  
    int n,x,y,c=0,N; 
scanf("%d",&N);
while(N--)
{
int a[1001][1001]={0};
scanf("%d",&n);  
x=0;y=0;  
c=a[x][y]=1;  
while (c<n*(n+1)/2)//最大数为n*n  
{  
while (y+1<n&&!a[x][y+1])//向右,到a[0][4]  
a[x][++y]=++c;  
while (x+1<n&&!a[x+1][y-1])//斜下  
a[++x][--y]=++c;  
while (x-1>=0&&!a[x-1][y])//向上  
a[--x][y]=++c;  
}     
        for (x=0;x<n;x++)  
{  
for (y=0;y<n-x;y++)  
printf("%4d ",a[x][y]);  
printf("\n");  
}  
}
return 0;
}  
  相关解决方案