当前位置:   article > 正文

【PTA】​L1-002 打印沙漏 ​ (C++)_本题要求你写个程序把给定的符号打印成样例规定形状。 给定任意正整数n个符号,不

本题要求你写个程序把给定的符号打印成样例规定形状。 给定任意正整数n个符号,不

题目链接:L1-002 打印沙漏 

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能教程

题目要求:

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

  1. 19 *

输出样例:

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

思路:

1.先通过这部分代码,将字符总数转化为行数,可以用循环从一行对称结构算起,最终总和超过输入字符总和则结束,要多加注意的是一定要先把m进行++操作

  1. int sum = 1;//起始的*
  2. int m = 0;//行数
  3. while(sum <= n)
  4. {
  5. m ++;
  6. sum += 2 * (2 * m + 1);
  7. }

2.根据行数输出上半部分

3.根据行数输出下半部分

4,在输出字符的循环里将输入的总数n进行--操作,最终就是剩下的字符个数 

代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5. int n;
  6. char c;
  7. cin >> n >> c;
  8. int sum = 1;//起始的*
  9. int m = 0;//行数
  10. while(sum <= n)
  11. {
  12. m ++;
  13. sum += 2 * (2 * m + 1);
  14. }
  15. //打印上半部分
  16. for(int i = 0; i < m; i ++)
  17. {
  18. for(int j = 0; j < i; j ++)
  19. cout << " ";
  20. for(int j = 0; j < (m * 2 - 1) - 2 * i; j ++)
  21. {
  22. cout << c;
  23. n--;
  24. }
  25. cout << endl;
  26. }
  27. //打印下半部分
  28. for(int i = 0; i < m - 1; i ++)
  29. {
  30. for(int j = m - i - 2; j > 0; j --)
  31. cout << " ";
  32. for(int j = 0; j < (2 * i) + 3; j ++)
  33. {
  34. cout << c;
  35. n--;
  36. }
  37. cout << endl;
  38. }
  39. cout << n << endl;
  40. return 0;
  41. }

测试结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/935767
推荐阅读
相关标签
  

闽ICP备14008679号