打印沙漏

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 }
原文地址:https://www.cnblogs.com/a1225234/p/4676561.html