PAT乙级 1027. 打印沙漏(20) 1027. 打印沙漏(20)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard
作者
CHEN, Yue

本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印

*****
 ***
  *
 ***
*****

所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(<=1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

输入样例:
19 *
输出样例:
*****
 ***
  *
 ***
*****
2


 1 #include<stdio.h>
 2 int main()
 3 {
 4     int N=17,n,sum=0,count=0,top=0,i,j,s,top_first;
 5     char star='*';
 6     char space=' ';
 7     scanf("%d %c",&n,&star);
 8     if(n<=6)  
 9         printf("%c
%d",star,n-1);
10     else {
11         if(n%2) N=n/2+1;
12         else      N=n/2;
13         while(sum<=N)//sum of top half
14         {
15             sum=sum+(2*count+1);
16             count++;
17         } count--;
18         sum=sum-(2*count+1);
19 
20         
21         top_first=2*count-1;
22         top=top_first;
23         for(i=0;i<count;i++)
24         {
25             for(s=0;s<(top_first-top)/2;s++)
26                 printf("%c",space);
27             for(j=0;j<top;j++)    
28                 printf("%c",star);
29             printf("
");
30             top-=2;
31         }
32         top=3;
33         for(i=0;i<count-1;i++)
34         {
35             for(s=0;s<(top_first-top)/2;s++)
36                 printf("%c",space);
37             for(j=0;j<top;j++)
38                 printf("%c",star);
39             printf("
");
40             top+=2;
41         }
42         printf("%d
",n-(sum*2-1) );
43     }
44     return 0;
45 }

1.以后声明变量一定要注意阿,这次就算变量声明的有点乱

2. 17行的代码写到19行去了,也是崩溃。。小错误