PAT乙级1027

今天药忘吃喽~ 2022-05-11 00:44 252阅读 0赞

1027 打印沙漏 (20 分)

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

  1. *****
  2. ***
  3. *
  4. ***
  5. *****

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

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

输入格式:

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

输出格式:

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

输入样例:

  1. 19 *

输出样例:

  1. *****
  2. ***
  3. *
  4. ***
  5. *****
  6. 2
  7. #include<iostream>
  8. #include<cstring>
  9. using namespace std;
  10. int main()
  11. {
  12. int a,i=0,j,n=0;
  13. int sum[33];
  14. sum[0]=0;
  15. for(i=1;i<33;i++)
  16. {
  17. sum[i]=2*i*i-1;
  18. }
  19. string b;
  20. cin>>a>>b;
  21. while(1)
  22. {
  23. if(sum[n+1]<=a)
  24. {
  25. n++;//算出一共几行
  26. }
  27. else
  28. break;
  29. }
  30. for(i=0;i<n;i++)
  31. {
  32. for(j=i;j>0;j--)cout<<" ";
  33. for(j=2*(n-i)-1;j>0;j--)cout<<b;
  34. cout<<endl;
  35. }//输出沙漏上半部分
  36. for(i=n-2;i>=0;i--) {
  37. for (j=i;j>0;j--)cout<<" ";
  38. for (j=2*(n-i)-1;j>0;j--)cout<<b;
  39. cout<<endl;
  40. }//输出沙漏下半部分
  41. cout<<a-sum[n];
  42. return 0;
  43. }

发表评论

表情:
评论列表 (有 0 条评论,252人围观)

还没有评论,来说两句吧...

相关阅读

    相关 PAT乙级1004

    1004 成绩排名 (20)(20 分) 读入n名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。 输入格式:每个测试输入包含1个测试用例,格式为\\

    相关 PAT乙级1003

    1003 我要通过!(20)(20 分) “答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出

    相关 PAT乙级1013

    1013 数素数(20 分) 令 Pi 表示第 i 个素数。现任给两个正整数 M≤N≤104,请输出 PM 到 PN 的所有素数。 输入格式: 输入在一行中给出 M

    相关 PAT乙级1031

    1031 查验身份证 (15 分) 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:\

    相关 PAT乙级1044

    1044 火星数字 (20 分) 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret。 地球人数字 1 到 12 的火星文分别为:jan, f