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

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

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

感谢阅读!

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


描述

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

输入描述:

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

输出描述:

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

示例1:


思路 :

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

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

先打印每一行的的空格

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

//(j = 0; j<i;j++)

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

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

//......

(j = 0; j<n-i; 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 :

cpp 复制代码
/*思路 : 首先要分两个步骤 控制每一行的打印
而每一行又由 空格+* 组成
先打印每一行的的空格
再打印每一行的 星号 把两个分开来 
//(j = 0; j<i;j++)
//i为0的时候j从0开始 这里一次都不打印 i为1的时候j从0开始 这里打印一次
//i为2的时候j从0开始 这里打印两次 i为3的时候j从0开始 这里打印3次
//......

(j = 0; j<n-i; j++)
//第一行 i是0 5减0 等于0 第二行 i等于1 5减1等于4 打印四个*加空格
//第三行 i是2 5减2 等于三 打印三个*加空格
//...

*/

# include <stdio.h>
int main ()

{
    int n = 0;
    
    while(scanf("%d",&n)!=EOF)
    {
        int i = 0;
        //每一行的打印 每打印一行退出依次循环 
        //先打印一行 打印空格
        for(i = 0; i<n; i++)
        {
            int j = 0;
    //先打印每一行的空格 因为每一行都是由空格和星号组成的
    //i为0的时候j从0开始 这里一次都不打印 i为1的时候j从0开始 这里打印一次
    //i为2的时候j从0开始 这里打印两次 i为3的时候j从0开始 这里打印3次
            //......
            for(j = 0; j<i;j++)
            {
                printf(" ");
            }
    //再打印每一行的星星 每一行都是有空格和星星组成
    //再打印*+空格
    //第一行 i是0 5减0 等于0 第二行 i等于1 5减1等于4 打印四个*加空格
    //第三行 i是2 5减2 等于三 打印三个*加空格
    //...
            for(j = 0; j<n-i; j++)
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}
------------------------------------------------------
#include <stdio.h> // 包含标准输入输出库

int main() // 主函数的开始
{
    int n = 0; // 定义一个整型变量n,用于存储用户输入的翻转金字塔边长

    while(scanf("%d",&n)!=EOF) // 使用while循环来处理多组输入直到文件结束符EOF
    {
        int i = 0; // 定义一个整型变量i,用于控制外层循环,表示当前行数

        // 外层循环,控制每一行的打印
        for(i = 0; i < n; i++)
        {
            int j = 0; // 定义一个整型变量j,用于控制内层循环

            // 内层循环1,先打印每一行前面的空格
            // 空格的数量随着行数的增加而减少
            for(j = 0; j < i; j++) // 循环i次,打印i个空格
            {
                printf(" "); // 打印一个空格
            }

            // 内层循环2,再打印每一行的星号
            // 星号的数量等于n-i,随着行数的增加而减少
            for(j = 0; j < n-i; j++) // 循环n-i次,打印n-i个星号和空格
            {
                printf("* "); // 打印一个星号和一个空格
            }
            printf("\n"); // 每行结束后打印换行符,以便开始新一行的打印
        }
    }
    return 0; // 主函数结束,返回0表示程序正常结束
}

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

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

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

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

代码 2 :

cpp 复制代码
#include <stdio.h>

int main() {
    int n;
    while (scanf("%d", &n) != EOF) { // 读取输入直到EOF
        if (n < 2 || n > 20) break; // 输入验证,确保n在2到20之间

        // 外层循环控制行数
        for (int i = 0; i < n; i++) {
            // 打印空格
            for (int j = 0; j < n - i - 1; j++) {
                printf(" ");
            }
            
            // 打印星号
            for (int k = 0; k < 2 * i + 1; k++) {
                printf("*");
            }
            
            // 换行
            printf("\n");
        }
    }
    
    return 0; // 程序结束
}

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

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

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

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

代码 3 :

cpp 复制代码
#include <stdio.h> // 包含标准输入输出库

int main() // 主函数的开始
{
    int a = 0; // 定义一个整型变量a,用于存储用户输入的翻转金字塔边长

    // 使用while循环来处理多组输入直到文件结束符EOF
    while ((scanf("%d", &a)) != EOF)
    {
        int j = 0; // 定义一个整型变量j,用于控制每行开头的空格数,初始化为0
        int k = a; // 定义一个整型变量k,用于控制每行的星号数,初始化为a

        // for循环控制打印的行数,共打印a行
        for (int i = 0; i < a; i++)
        {
            // 内层第一个for循环,打印每行开头的空格
            // 空格数从0开始,每行递增1
            for (int b = 0; b < j; b++)
            {
                printf(" "); // 打印一个空格
            }

            // 内层第二个for循环,打印每行的星号
            // 星号数从a开始,每行递减1
            for (int c = 0; c < k; c++)
            {
                printf("* "); // 打印一个星号和一个空格
            }

            printf("\n"); // 每行结束后打印换行符,以便开始新一行的打印
            j++; // 每行之后空格数增加1
            k--; // 每行之后星号数减少1
        }
    }
    return 0; // 主函数结束,返回0表示程序正常结束
}

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

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

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

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

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

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

相关推荐
David猪大卫5 分钟前
数据结构修炼——顺序表和链表的区别与联系
c语言·数据结构·学习·算法·leetcode·链表·蓝桥杯
Iceberg_wWzZ7 分钟前
数据结构(Day14)
linux·c语言·数据结构·算法
微尘89 分钟前
C语言存储类型 auto,register,static,extern
服务器·c语言·开发语言·c++·后端
liangbm316 分钟前
MATLAB系列05:自定义函数
开发语言·笔记·matlab·教程·函数·自定义函数·按值传递
计算机学姐16 分钟前
基于PHP的电脑线上销售系统
开发语言·vscode·后端·mysql·编辑器·php·phpstorm
三玖诶25 分钟前
如何在 Qt 的 QListWidget 中为某一行添加点击事件
开发语言·qt
InJre32 分钟前
QT widgets 窗口缩放,自适应窗口大小进行布局
开发语言·qt·ui
可愛小吉34 分钟前
Python 课程10-单元测试
开发语言·python·单元测试·tdd·unittest
五味香1 小时前
C++学习,动态内存
java·c语言·开发语言·jvm·c++·学习·算法
无名之逆1 小时前
计算机专业的就业方向
java·开发语言·c++·人工智能·git·考研·面试