题目描述
输入一个正整数N,输出N行的蛇形数字三角形(具体看样例)。
输入
一行一个正整数,3 ≤ N ≤ 30.
输出
N行,第一行N个数,第二行N - 1个数,……第N行一个数。每个数占5列。
样例输入
9
样例输出
1 2 4 7 11 16 22 29 37 3 5 8 12 17 23 30 38 6 9 13 18 24 31 39 10 14 19 25 32 40 15 20 26 33 41 21 27 34 42 28 35 43 36 44 45
题目描述
输入一个正整数N,输出N行的蛇形数字三角形(具体看样例)。
输入
一行一个正整数,3 ≤ N ≤ 30.
输出
N行,第一行N个数,第二行N - 1个数,……第N行一个数。每个数占5列。
样例输入
9
样例输出
1 2 4 7 11 16 22 29 37 3 5 8 12 17 23 30 38 6 9 13 18 24 31 39 10 14 19 25 32 40 15 20 26 33 41 21 27 34 42 28 35 43 36 44 45
#include <stdio.h>
#include <stdbool.h>
int cnt = 0;
int a[26][50];
int n;
void f(int top, int bottom)
{
int i, j;
if(top<(n+1)/4)
return;
for(j=n-bottom+1; j<bottom; ++j)
a[top][j] = ++cnt;
for(i=top; i>(1+n)/2-top+1; --i, --j)
a[i][j] = ++cnt;
if(j==(n+1)/2)
{
bool go = true;
while(i<top)
{
a[i][j] = ++cnt;
++i;
--j;
go = false;
}
if(go)
a[i][j] = ++cnt;
go = true;
}
f(top-1, bottom-2);
return;
}
int main(void)
{
int top, bottom, i, j;
for(i=0; i<26; ++i)
for(j=0; j<50; ++j)
a[i][j] = 0;
scanf("%d", &n);
bottom = n;
top = (1 + bottom) / 2;
f(top, bottom);
for(i=1; i<=(n+1)/2; ++i)
{
for(j=1; j<=n; ++j)
{
if(a[i][j]==0)
printf(" ");
else
printf("%4d", a[i][j]);
}
putchar('\n');
}
return 0;
}
可以参数一下