PTA basic 1027 打印沙漏 (20 分) c语言实现(gcc)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
1 #include "stdio.h" 2 //测试用例 3 //5 * //测试点2 4 //19 * 5 6 int main(){ 7 int i=1,n,m,temp,j,space,charNum,count=0; 8 char c; 9 scanf("%d %c",&n,&c); 10 m=(n-1)/2; 11 temp=m; 12 while(temp>2)//测试点2 13 { 14 i++; 15 temp=temp-2*i-1; 16 } 17 18 for(j=i-1;j>=0;j--){ 19 space=i-j-1; 20 charNum=j*2+1; 21 count+=charNum; 22 while(space){ 23 printf(" "); 24 space--; 25 } 26 while(charNum){ 27 printf("%c",c); 28 charNum--; 29 } 30 printf("\n"); 31 } 32 33 for(j=1;j<i;j++){ 34 space=i-j-1; 35 charNum=j*2+1; 36 count+=charNum; 37 while(space){ 38 printf(" "); 39 space--; 40 } 41 while(charNum){ 42 printf("%c",c); 43 charNum--; 44 } 45 printf("\n"); 46 } 47 printf("%d\n",n-count); 48 return 0; 49 }