• 打印沙漏


    链接: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 }
  • 相关阅读:
    模板之导入include
    模板之继承
    jQuery ajax简单用法
    Django 路由系统URL
    Django 的简单使用
    python selenium web自动化的三种等待的区别
    Django的数据库介绍
    Django 安装与介绍
    插件轮播
    bootstrap 简单使用(实现图标和按钮下拉)
  • 原文地址:https://www.cnblogs.com/mtc-dyc/p/4624288.html
Copyright © 2020-2023  润新知