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