蛇形填数(二)
时间限制:2000 ms | 内存限制:65535 KB
难度:3
- 描述
-
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; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-10-10 12:28:38