• 牛客网刷题 | BC104 翻转金字塔图案


    目前主要分为三个专栏,后续还会添加:

            专栏如下:                 C语言刷题解析       C语言系列文章       我的成长经历

    感谢阅读!

    初来乍到,如有错误请指出,感谢!


    描述

    KiKi学习了循环,BoBo老师给他出了一系列打印图案的练习,该任务是打印用“*”组成的翻转金字塔图案

    输入描述:

    多组输入,一个整数(2~20),表示翻转金字塔边的长度,即“*”的数量,也表示输出行数。

    输出描述:

    针对每行输入,输出用“*”组成的金字塔,每个“*”后面有一个空格。

    示例1:


    思路 :

    首先要分两个步骤 控制每一行的打印

    而每一行又由 空格+* 组成

    先打印每一行的的空格

    再打印每一行的 星号 把两个分开来

    //(j = 0; j

    //i为0的时候j从0开始 这里一次都不打印 i为1的时候j从0开始 这里打印一次

    //i为2的时候j从0开始 这里打印两次 i为3的时候j从0开始 这里打印3次

    //......

    (j = 0; j

    //第一行 i是0 5减0 等于0 第二行 i等于1 5减1等于4 打印四个*加空格

    //第三行 i是2 5减2 等于三 打印三个*加空格

    //......


    1. 读取输入:首先,需要读取用户输入的整数,这个整数决定了翻转金字塔最底层的星号数量。

    2. 循环控制:使用一个for循环来控制打印的行数,循环的次数等于输入的整数。

    3. 计算空格:在每一行中,需要首先打印一定数量的空格,以使星号右对齐并形成金字塔形状。空格的数量可以通过n - i - 1来计算,其中n是输入的整数,i是当前的行数(从0开始)。

    4. 打印星号:在打印完空格之后,使用另一个for循环来打印星号。内层循环的次数等于2*i + 1,这是因为除了第一行和最后一行外,每行的星号数量是奇数,并且随着行数的增加而增加。

    5. 换行:在每行的星号打印完毕后,使用printf("\n");打印一个换行符,以便开始新的一行。

    6. 循环结束:当for循环完成所有迭代后,整个翻转金字塔图案打印完毕。


    代码 1 :

    1. /*思路 : 首先要分两个步骤 控制每一行的打印
    2. 而每一行又由 空格+* 组成
    3. 先打印每一行的的空格
    4. 再打印每一行的 星号 把两个分开来
    5. //(j = 0; j
    6. //i为0的时候j从0开始 这里一次都不打印 i为1的时候j从0开始 这里打印一次
    7. //i为2的时候j从0开始 这里打印两次 i为3的时候j从0开始 这里打印3次
    8. //......
    9. (j = 0; j
    10. //第一行 i是0 5减0 等于0 第二行 i等于1 5减1等于4 打印四个*加空格
    11. //第三行 i是2 5减2 等于三 打印三个*加空格
    12. //...
    13. */
    14. # include
    15. int main ()
    16. {
    17. int n = 0;
    18. while(scanf("%d",&n)!=EOF)
    19. {
    20. int i = 0;
    21. //每一行的打印 每打印一行退出依次循环
    22. //先打印一行 打印空格
    23. for(i = 0; i
    24. {
    25. int j = 0;
    26. //先打印每一行的空格 因为每一行都是由空格和星号组成的
    27. //i为0的时候j从0开始 这里一次都不打印 i为1的时候j从0开始 这里打印一次
    28. //i为2的时候j从0开始 这里打印两次 i为3的时候j从0开始 这里打印3次
    29. //......
    30. for(j = 0; j
    31. {
    32. printf(" ");
    33. }
    34. //再打印每一行的星星 每一行都是有空格和星星组成
    35. //再打印*+空格
    36. //第一行 i是0 5减0 等于0 第二行 i等于1 5减1等于4 打印四个*加空格
    37. //第三行 i是2 5减2 等于三 打印三个*加空格
    38. //...
    39. for(j = 0; j
    40. {
    41. printf("* ");
    42. }
    43. printf("\n");
    44. }
    45. }
    46. return 0;
    47. }
    48. ------------------------------------------------------
    49. #include // 包含标准输入输出库
    50. int main() // 主函数的开始
    51. {
    52. int n = 0; // 定义一个整型变量n,用于存储用户输入的翻转金字塔边长
    53. while(scanf("%d",&n)!=EOF) // 使用while循环来处理多组输入直到文件结束符EOF
    54. {
    55. int i = 0; // 定义一个整型变量i,用于控制外层循环,表示当前行数
    56. // 外层循环,控制每一行的打印
    57. for(i = 0; i < n; i++)
    58. {
    59. int j = 0; // 定义一个整型变量j,用于控制内层循环
    60. // 内层循环1,先打印每一行前面的空格
    61. // 空格的数量随着行数的增加而减少
    62. for(j = 0; j < i; j++) // 循环i次,打印i个空格
    63. {
    64. printf(" "); // 打印一个空格
    65. }
    66. // 内层循环2,再打印每一行的星号
    67. // 星号的数量等于n-i,随着行数的增加而减少
    68. for(j = 0; j < n-i; j++) // 循环n-i次,打印n-i个星号和空格
    69. {
    70. printf("* "); // 打印一个星号和一个空格
    71. }
    72. printf("\n"); // 每行结束后打印换行符,以便开始新一行的打印
    73. }
    74. }
    75. return 0; // 主函数结束,返回0表示程序正常结束
    76. }

    程序使用while循环来处理多组输入,直到遇到EOF。在每次循环中,首先读取用户输入的整数n,这个整数表示翻转金字塔最底层的星号数量。

    外层for循环控制行数,从0到n-1。

    在每次迭代中,首先有一个内层循环用于打印空格,空格的数量等于当前行数i。接着,另一个内层循环用于打印星号和空格,星号的数量等于n-i

    每完成一行的打印后,使用printf("\n")来换行,准备打印下一行。当所有行都打印完毕后,while循环结束,程序返回0,表示正常退出。

    代码 2 :

    1. #include
    2. int main() {
    3. int n;
    4. while (scanf("%d", &n) != EOF) { // 读取输入直到EOF
    5. if (n < 2 || n > 20) break; // 输入验证,确保n在2到20之间
    6. // 外层循环控制行数
    7. for (int i = 0; i < n; i++) {
    8. // 打印空格
    9. for (int j = 0; j < n - i - 1; j++) {
    10. printf(" ");
    11. }
    12. // 打印星号
    13. for (int k = 0; k < 2 * i + 1; k++) {
    14. printf("*");
    15. }
    16. // 换行
    17. printf("\n");
    18. }
    19. }
    20. return 0; // 程序结束
    21. }

     这段代码首先包含了stdio.h头文件,定义了主函数main,并在其中定义了一个整数变量n来存储用户输入的翻转金字塔最底层的星号数量。

    然后,程序使用while循环来读取输入直到EOF,并验证输入是否在2到20之间。

    外层for循环控制行数,内层两个for循环分别用来打印空格和星号。

    每完成一行的打印后,程序使用printf("\n")来换行。当输入结束时,程序返回0,表示正常退出。

    代码  3 :

    1. #include // 包含标准输入输出库
    2. int main() // 主函数的开始
    3. {
    4. int a = 0; // 定义一个整型变量a,用于存储用户输入的翻转金字塔边长
    5. // 使用while循环来处理多组输入直到文件结束符EOF
    6. while ((scanf("%d", &a)) != EOF)
    7. {
    8. int j = 0; // 定义一个整型变量j,用于控制每行开头的空格数,初始化为0
    9. int k = a; // 定义一个整型变量k,用于控制每行的星号数,初始化为a
    10. // for循环控制打印的行数,共打印a行
    11. for (int i = 0; i < a; i++)
    12. {
    13. // 内层第一个for循环,打印每行开头的空格
    14. // 空格数从0开始,每行递增1
    15. for (int b = 0; b < j; b++)
    16. {
    17. printf(" "); // 打印一个空格
    18. }
    19. // 内层第二个for循环,打印每行的星号
    20. // 星号数从a开始,每行递减1
    21. for (int c = 0; c < k; c++)
    22. {
    23. printf("* "); // 打印一个星号和一个空格
    24. }
    25. printf("\n"); // 每行结束后打印换行符,以便开始新一行的打印
    26. j++; // 每行之后空格数增加1
    27. k--; // 每行之后星号数减少1
    28. }
    29. }
    30. return 0; // 主函数结束,返回0表示程序正常结束
    31. }

    程序使用while循环来处理多组输入,直到遇到EOF。

    在每次循环中,首先读取用户输入的整数a,这个整数表示翻转金字塔最底层的星号数量。

    外层for循环控制打印的行数,从0到a-1。

    在每次迭代中,首先有一个内层循环用于打印空格,空格的数量由变量j控制,每行递增。接着,另一个内层循环用于打印星号和空格,星号的数量由变量k控制,每行递减。

    每完成一行的打印后,使用printf("\n")来换行,准备打印下一行。

    每行打印后,jk分别更新,以准备下一行的打印。当所有行都打印完毕后,while循环结束,程序返回0,表示正常退出。

      

  • 相关阅读:
    k8s kubeadm配置
    使用uncompyle6反编译pyc文件(附报KeyError和Error: uncompyle6 requires Python 2.6-3.8的解决方法)
    springcloud24:分布式事务 Seata处理分布式事务总结篇
    vue项目中 commonJS转es6
    19 | spark 统计 每列的数据非缺失值
    数据通信网络之IPv6以太网多层交换
    在Ubuntu 20.04上安装和配置MySQL 8:详细指南和远程访问设置
    大语言模型(LLM)综述(一):大语言模型介绍
    5个节约生命的Python小技巧
    腾讯云饥荒服务器配置选择和费用价格表
  • 原文地址:https://blog.csdn.net/m0_64000959/article/details/139376745