• PAT-乙级-1027 打印沙漏


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

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

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

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

    输入格式:

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

    输出格式:

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

    输入样例:

    19 *
    

    输出样例:

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



    分析:
      需要考虑沙漏有几层、每层空格个数和字符个数
      只需要求出递减的层数即可
      可以得到一个公式计算层数和多余的个数
      给定个数n:
      层数为floor=sqrt((n+1)/2);剩余个数为n-2*floor*floor+1;



     1 //c++
     2 #include<iostream>
     3 #include<cmath>
     4 using namespace std;
     5 
     6 int main(){
     7   int n;
     8   char c;
     9   cin>>n>>c;
    10   int floor=sqrt((n+1)/2);
    11   int res=n-2*floor*floor+1;
    12   for(int i=0;i<floor;i++){
    13     for(int j=0;j<i;j++)
    14       cout<<' ';
    15     for(int j=0;j<2*(floor-i)-1;j++)
    16       cout<<c;
    17     cout<<endl;
    18   }
    19   for(int i=floor-2;i>=0;i--){
    20     for(int j=0;j<i;j++)
    21       cout<<' ';
    22     for(int j=0;j<2*(floor-i)-1;j++)
    23       cout<<c;
    24     cout<<endl;
    25   }
    26   cout<<res;
    27   return 0;
    28 }
  • 相关阅读:
    CF11C How Many Squares?
    CF3D Least Cost Bracket Sequence
    P4106 [HEOI2014]逻辑翻译
    吉大第二届青云杯复赛第6题
    2017六省联考部分题目整理【期末考试,寿司餐厅,组合数问题,分手是祝愿】
    CF578D LCS Again
    P5072 [Ynoi2015]盼君勿忘
    P3232 [HNOI2013]游走
    P6154 游走
    P4648 [IOI2007] pairs 动物对数
  • 原文地址:https://www.cnblogs.com/tenjl-exv/p/9812895.html
Copyright © 2020-2023  润新知