当前位置:   article > 正文

PTA:L1-002 打印沙漏_pta l1-002

pta l1-002

L1-002 打印沙漏

分数 20

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

  1. 19 *

输出样例:

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

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

本题的解题思路:根据输入的N,找到最上面一行所需要打印的个数,然后根据格式打印即可。

具体代码如下:C++实现

  1. #include <iostream>
  2. using namespace std;
  3. void L1_002_print_hourglass()
  4. {
  5. int num;
  6. char str;
  7. cin>> num >> str;
  8. int cnt = 1;
  9. int temp =1;
  10. int res = 0;
  11. while(temp <= num)
  12. {
  13. res = num-temp; //记录剩余个数
  14. temp += 2 * (2*cnt + 1);
  15. cnt++;
  16. }
  17. cnt = cnt - 1; //记录打印的行数
  18. for(int i = 0;i<cnt;i++)
  19. {
  20. int c = 2*(cnt-i-1) + 1;
  21. for(int j = 0;j<i;j++)
  22. {
  23. cout << " ";
  24. }
  25. for(int k = 0;k<c;k++)
  26. {
  27. cout << str;
  28. }
  29. cout << endl;
  30. }
  31. for(int i = 1;i<cnt;i++)
  32. {
  33. int c = 2*i +1;
  34. for(int j = 0;j<cnt-i-1;j++)
  35. {
  36. cout << " ";
  37. }
  38. for(int j = 0;j<c;j++)
  39. {
  40. cout << str;
  41. }
  42. cout <<endl;
  43. }
  44. cout << res;
  45. }
  46. int main()
  47. {
  48. L1_002_print_hourglass();
  49. return 0;
  50. }

Python代码实现:

  1. a = input()
  2. num =(a.split(" ")[0])
  3. char1 = a.split(" ")[-1]
  4. num1 = int(num)
  5. cnt = 1
  6. temp = 1
  7. res = 0
  8. while(temp <= num1):
  9. res = num1 - temp
  10. temp = temp + 2*(2*cnt + 1)
  11. cnt = cnt + 1
  12. cnt = cnt -1
  13. for i in range(cnt):
  14. c = 2*(cnt-i) -1
  15. for j in range(i):
  16. print(" ",end="")
  17. while(c):
  18. print(char1,end="")
  19. c = c - 1
  20. print("\n",end="")
  21. for i in range(1,cnt):
  22. c = 2*i+1
  23. for j in range(cnt-1-i):
  24. print(" ",end="")
  25. while (c):
  26. print(char1, end="")
  27. c = c - 1
  28. print("\n",end="")
  29. print(res)

有什么问题,欢迎私聊我!!!

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号