题目分析:
对于输入的正整数N(N < 1000),首先计算出沙漏的最大行数line。
假设沙漏的行数的x,需要的字符为f(x),通过数学公式的计算得到f(x)与x的关系,关系如下:
这样对于属于的N我们就可以得到沙漏的行数,就可以按照题目要求的格式打印出来。
代码如下:
#include <stdio.h>
#include <math.h>
int main(void)
{
int num = 0;
char ch = 0;
int line = 0;
while((scanf("%d %c",&num,&ch) != EOF) && (num <= 1000))
{
/*得到应打印的行数*/
line = (int)sqrt(2*num + 2) - 1;
int index = 0 , j = 0;
/** 得到上半部分 */
for(index = line; index >= 1; index = index - 2)
{
for(j = 0;j < (line - index)/2 ;j ++)
printf(" ");
for(j = 0; j < index; j++ )
printf("%c",ch);
printf("\n");
}
/** 得到下半部分 */
for(index = 3; index <= line; index = index + 2)
{
for(j = 0;j < (line - index)/2 ;j ++)
printf(" ");
for(j = 0; j < index; j++ )
printf("%c",ch);
printf("\n");
}
printf("%d\n",num - (line+3)*(line-1)/2 - 1);
}
return 0;
}