打印沙漏

链接:http://www.nowcoder.com/pat/6/problem/4053

题目描述

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

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

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

输入描述:

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



输出描述:

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

输入例子:

19 *

输出例子:

*****

***

*

***

*****

2
思路:前几天做过一个打印三角形的题目,和这个题目的打印过程差不多。只要先计算好第一行应该有多少个字符就行了。
打印的时候可以设置一个变量来保存当前应该打印的空格的个数。
如 int b=0, t=N, c=N; //b表示应该打印的空格个数 t表示应该打印的字符总个数 c表示应该打印的字符个数
b = t-c;
b /= 2; //因为左右两边各一半空格
注:这个题目还挺搞怪的,让打印沙漏,又不让完整打印
***** //前面空出的地方需要空格,后面就不需要。只打印到字符'*'就可以结束了。如果后面再加空格会提示格式错误。
***
*
***
*****
 1 #include "iostream"
 2 #include <iomanip>
 3 #include <string.h>
 4 #include <string>
 5 #include <vector>
 6 #include <cmath>
 7 #include <cctype>
 8 #include <algorithm>
 9 using namespace std;
10 
11 #define COUNT(k) (1+k)*(1+k)/2-1
12 
13 int main()
14 {
15     int arr[70];
16     memset(arr, 0, sizeof(arr));
17     int n;
18     char ch;
19     cin >>n >>ch;
20     for(int i=1; i<70; ++i)    
21     {    if(i%2 == 0) continue;    
22         arr[i] = COUNT(i);
23     }
24     int t1, t2;
25     for(int i=1; i<70-1; i+=2)
26     {
27         if(i%2 == 0)continue;
28         if(arr[i]<=n && arr[i+2]>n)
29         {
30             t1 = i;
31             t2 = n - arr[i];
32             break;
33         }
34     }
35     int t3, b;
36     t3 = t1;
37     b = 0;
38     while(t3 >= 1)
39     {
40         b = (t1-t3)/2;
41         for(int i=0; i<b; ++i) cout <<" ";
42         for(int i=0; i<t3; ++i) cout <<ch;
43         //for(int i=0; i<b; ++i) cout <<" ";
44         t3 -= 2;
45         cout <<endl;
46     }
47     t3 = 3;
48     b = 0;
49     while(t3 <= t1)
50     {
51         b = (t1-t3)/2;
52         for(int i=0; i<b; ++i) cout <<" ";
53         for(int i=0; i<t3; ++i) cout <<ch;
54         //for(int i=0; i<b; ++i) cout <<" ";
55         t3 += 2;
56         cout <<endl;
57     }
58     cout <<t2 <<endl;
59     return 0;
60 }
原文地址:https://www.cnblogs.com/mtc-dyc/p/4624288.html