2025-03-05 学习记载--C/C++-PTA 习题5-8 空心的数字金字塔

[复制链接]
发表于 2025-10-20 11:17:39 | 显示全部楼层 |阅读模式
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻
  一、标题形貌 ⭐️

习题5
-8 空心的数字金字塔


本题要求实现一个函数,输出n行空心的数字金字塔。
函数接口界说:
  1. void hollowPyramid( int n );
复制代码
此中n是用户传入的参数,为[1, 9]的正整数。要求函数按照如样例所示的格式打印出n行空心的数字金字塔,请留意,末了一行的第一个数字前没有空格。
裁判测试步调样例:🌰
  1. #include <stdio.h>
  2. void hollowPyramid ( int n );
  3. int main()
  4. {   
  5.     int n;
  6.     scanf("%d", &n);
  7.     hollowPyramid ( n );
  8.     return 0;
  9. }
  10. /* 你的代码将被嵌在这里 */
复制代码
输入样例:
  1. 5
复制代码
输出样例:
  1.     1   2 2  3   3 4     45
  2. 5
  3. 5
  4. 5
  5. 5
  6. 5
  7. 5
  8. 5
  9. 5
复制代码
二、解题步调 ⭐️

   下面以n=5
举例:🦋
  

  • 第1步 🎀、外层循环(从1到n):金字塔层数。则:for循环,从1遍历到n;
  • 第2步 🎀、内层循环1:打印 每一层 第一个字符前的空格。则:第一层 打印4个空格,第二层打印3个空格,第三层打印2个空格,第四层打印1个空格,第五层打印0个空格;
  • 第3步 🎀、判断是否是第一层,假如是第一层,直接打印数字 1;
  • 第4步 🎀、判断是否是末了一层,假如是末了一层,打印一连的数字 n,数目为 2 * n - 1;
  • 第5
    🎀、内层循环2:处置处罚中央层,把 数字和一个空格 看作团体,即"G_“。则:第一层 须要打印一个团体"1_”,第二层须要打印两个团体"2_2_“,第三层须要打印三个团体"3_3_3_”,第四层须要打印四个团体"4_4_4_4_";

    • 关键】由于 是 空心 的 数字金字塔,以是对上面 的 “团体” 处置处罚如下:&#x1f4a5
      ;

      • 1、如果 第1个数字,则打印 数字+一个空格
      • 2、如果 末了一个数字,则只打印 数字
      • 3、别的环境,则打印 两个空格


  • 第6步 🎀、每层打印完成后换行,进入下一层的打印。
    [img]https://i-blog.csdnimg.cn/direct/179a905
    100a5
    494ca5
    64793d1c85
    d262.png[/img]

  总结: 🦋



  • 该步调通过嵌套循环实现空心数字金字塔的打印。
  • 外层循环控制层数,内层循环分别负责打印空格、数字和空格。
  • 第一层和末了一层单独处置处罚,中央层打印数字和空格。
三、代码(C语言)⭐️

  1. #include <stdio.h>
  2. void hollowPyramid ( int n );
  3. int main()
  4. {
  5.     int n;
  6.     scanf("%d", &n);
  7.     hollowPyramid ( n );
  8.     return 0;
  9. }
  10. /* 你的代码将被嵌在这里 */
  11. void hollowPyramid(int n) {
  12.     // 外层循环:控制金字塔的层数(从1到n)
  13.     for (int i = 1; i <= n; i++) {
  14.         // 内层循环1:打印每一层 第一个字符 前的空格
  15.         for (int j = n - i; j > 0; j--) {
  16.             printf(" "); // 打印每一层 第一个字符 前的空格
  17.         }
  18.         // 判断是否是第一层
  19.         if (i == 1) {
  20.             printf("%d", i); // 打印 第一个数字
  21.         }
  22.         // 判断是否是最后一层
  23.         else if (i == n) {
  24.             // 打印 最后一层的数字
  25.             for (int i = 0; i < 2 * n - 1; i++) {
  26.                 printf("%d", n); // 打印 最后一层的数字
  27.             }
  28.         }
  29.         // 处理中间层
  30.         else {
  31.             // 内层循环2:打印非最后一层的数字和空格
  32.             for (int k = i; k > 0; k--) {
  33.                 if (k == i) {
  34.                     printf("%d ", i); // 打印 第一个数字+一个空格
  35.                 } else if (k == 1) {
  36.                     printf("%d", i); // 打印 最后一个数字
  37.                 } else {
  38.                     printf("  "); // 打印 两个空格
  39.                 }
  40.             }
  41.         }
  42.         // 换行,进入下一层的打印
  43.         printf("\n");
  44.     }
  45. }
复制代码

[img]https://i-blog.csdnimg.cn/direct/1fe8d83f7d7d46b49c6edca612fbe5
1b.jpeg[/img]

   【留意 📢 】 团结以下文章一起看:🦋
  

  • 练习5
    -3 字符金字塔
  • 练习2-3 输出倒三角图案
  • 习题4-9 打印菱形图案

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表