标签:
1 2 3 4 5 12 13 14 6 11 15 7 10 8 9跟蛇形填数一样,只是填数要求按照三角形填。注意每组数据之间用空行隔开
思路:
通过while语句来控制走向(右,左下,上),然后每走一步变量t加1,最终给定范围的每一个方格都填满对应的数为止!
代码:
#include <stdio.h>
#include <string.h>
int a[1005][1005];
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(a,0,sizeof(a));
int n;
scanf("%d",&n);
int x=0,y=0,t=1;
a[0][0]=1;
int u=n*(n+1)/2;
int i,j;
while(t<u)//在小于位数的情况下才执行下面语句!
{
while(y+1<n-x&&!a[x][y+1])//右
a[x][++y]=++t;//因为列数发生了变化,所以不是n,而是n-x(与行号有关)
while(y-1>=0&&x+1<n&&!a[x+1][y-1])//左下
{
a[++x][--y]=++t;//向左下移动的时候要。保证列数大于等于0,行数小于n!
}
while(x-1>=0&&!a[x-1][y]) //上
a[--x][y]=++t;//向上移动的时候,要保证行数不小于0!
}
for(int i=0;i<n;i++)
{
for(int j=0;j<n-i-1;j++)
{
printf("%d ",a[i][j]);
}
printf("%d\n",a[i][n-i-1]);
}
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/dxx_111/article/details/48136009