码迷,mamicode.com
首页 > 其他好文 > 详细

打印沙漏

时间:2015-03-13 14:06:39      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2

程序:

#include <iostream> #include <cstdio> using namespace std;

int main() {  int n , i, sum =  6;  int Ssum = 7, Num, j;  char c;  scanf("%d %c", &n, &c);  if(n < 7)  {   cout << c << endl;   cout << n - 1 << endl;  }  else  {      for(i = 1; ; i++)   {    if(Ssum+sum+4 > n)    break;    else    {     sum = sum + 4;     Ssum = Ssum + sum;    }   }   for(j = i, Num = 0; j > 0; j--, Num++)   {    for(int m = 0; m < Num; m++)//输出每行前面的空格    cout << " ";        for(int t = 0; t < 2*j+1; t++)//每行输出指定数量的符号    cout << c;    cout << endl;   }      for(j = 0; j < Num; j++)//输出最中间的一行字符   cout << " ";   cout << c << endl;   Num--;   for(j = 1; j <= i; j++,Num--)//输出下半部分   {    for(int m = 0; m < Num; m++)    cout << " ";    for(int t = 0; t < 2*j+1; t++)    cout << c;    cout << endl;   }   cout << n - Ssum << endl;  }    return 0; }

打印沙漏

标签:

原文地址:http://www.cnblogs.com/baoshilong/p/4334806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!