1027.打印沙漏

梦里梦外; 2021-09-12 07:56 407阅读 0赞

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

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

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

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

输入格式:

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

输出格式:

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

输入样例:

  1. 19 *

输出样例:

  1. *****
  2. ***
  3. *
  4. ***
  5. *****
  6. 2 #include "stdafx.h"
  7. #include<stdio.h>
  8. #include<string.h>
  9. #pragma warning(disable:4996)
  10. int main()
  11. {
  12. int sum,n = 0;
  13. scanf("%d", &sum);
  14. getchar();
  15. char c = getchar();
  16. //得到层数和剩余数量
  17. while ((2 * (n + 1) * (n + 1) - 1) <= sum){
  18. n++;
  19. }
  20. int temp = sum - (2 * n * n - 1);
  21. //打印上半层
  22. for (int i = 0; i < n; i++)
  23. {
  24. for (int j = 0; j < (i + 2 * (n - i) - 1); j++)
  25. {
  26. if (j < i)
  27. {
  28. printf(" ");
  29. }
  30. else{
  31. printf("%c",c);
  32. }
  33. }
  34. printf("\n");
  35. }
  36. //打印下半层
  37. for (int i = 1; i < n; i++)
  38. {
  39. for (int j = 0; j < ((2 * i + 1) + (n - 1 - i)); j++)
  40. {
  41. if (j < (n - 1 - i))
  42. {
  43. printf(" ");
  44. }
  45. else{
  46. printf("%c",c);
  47. }
  48. }
  49. printf("\n");
  50. }
  51. printf("%d\n", temp);
  52. return 0;
  53. }

发表评论

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

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

相关阅读

    相关 1027.打印

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