牛客网刷题 | BC103 金字塔图案

news2025/1/17 21:15:12

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

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

感谢阅读!

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


描述

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

输入描述:

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

输出描述:

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


思路 :

首先可以想到这个由普通的直角三角形进行添加空格的操作

然后变成金字塔的形状 也是先打印空格 然后再打印星号加空格

*

**

***

****

*****

.......

由上面的直角三角形变形而来

先在星号后面加空格

然后在空格和星号前面加空格

 


  1. 理解问题:首先,要清楚题目要求打印一个等腰三角形图案,该三角形由星号(*)组成,且星号后面跟着一个空格。

  2. 确定输入:题目要求输入一个整数(2~20),这个整数表示金字塔一边的星号数量,同时也决定了打印的行数。

  3. 确定输出格式:每行的星号数量从1开始递增,直到达到最底层的n个星号。每行星号之间用空格分隔,星号后面也要跟一个空格。空格的数量需要根据当前行的位置来确定,以保证星号居中对齐。

  4. 设计算法

    • 使用一个外部循环(for循环)来控制行数,循环变量i从1遍历到n。
    • 对于每一行,首先需要打印一定数量的空格,使得星号能够居中。空格的数量可以通过(n - i) * 2来计算,因为除了最中间的星号外,每增加一行,两边都会多出一个空格。
    • 接着,使用一个内部循环(另一个for循环)来打印星号。每行的星号数量为2 * i - 1,这是因为除了第一行和最后一行外,其他每行的星号数量都是奇数,并且随着行数的增加,星号数量线性增加。
    • 每行打印完成后,使用printf("\n")输出一个换行符,以便开始打印下一行。
  5. 编写代码:根据上述算法设计,编写C语言代码实现功能。

  6. 处理多组输入:题目中提到有多组输入,因此使用while循环结合scanf函数来持续读取输入,直到EOF(文件结束符)。


代码 1 :

/*思路 : 首先可以想到这个由普通的直角三角形进行添加空格的操作
然后变成金字塔的形状 也是先打印空格 然后再打印星号加空格
*
**
***
****
*****
.......
由上面的直角三角形变形而来 
先在星号后面加空格
然后在空格和星号前面加空格
*/

# 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;
            for(j=n-1;j>i;j--)//控制每行的空格 尤其要注意 j=n-1 
            //不能写成 j=n
            {
                printf(" ");
            }
            for(j=0;j<=i;j++)//这是打印星号和空格的循环
            {
                printf("* ");
            }
            printf("\n");
        }
    }
    return 0;
}

-------------------------------------------------------------------
#include <stdio.h> // 包含标准输入输出库

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

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

        // 外层循环,控制打印金字塔的每一行
        for(i = 0; i < n; i++) // 从第0行开始,直到第n-1行
        {
            int j = 0; // 定义一个整型变量j,用于控制内层循环

            // 内层第一个for循环,控制每行前面的空格数量
            // 空格的数量从最后一行的0个空格递增到第0行的n-1个空格
            for(j = n - 1; j > i; j--) // 从n-1开始递减到i,打印空格
            {
                printf(" "); // 打印一个空格
            }

            // 内层第二个for循环,控制每行打印星号和空格
            // 星号的数量随着行数的递增而递增,从第0行的1个星号到第n-1行的n个星号
            for(j = 0; j <= i; j++) // 从0开始递增,打印i+1个星号和空格
            {
                printf("* "); // 打印一个星号和一个空格
            }
            printf("\n"); // 每行结束后打印换行符,以便开始新一行的打印
        }
    }
    return 0; // 主函数结束,返回0表示程序正常结束
}

程序使用while循环来处理多组输入,直到遇到EOF。在每次循环中,首先读取用户输入的整数n,这个整数表示金字塔一边的长度。

外层for循环控制打印金字塔的行数,从第0行开始直到第n-1行。

对于每一行,首先是内层第一个for循环,用于打印空格,空格的数量从最后一行的0个递增到第0行的n-1个。

接着是内层第二个for循环,用于打印星号和空格,星号的数量从第0行的1个递增到第n-1行的n个。

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

代码 2 :

#include <stdio.h>

int main() {
    int n;
    // 使用while循环处理多组输入直到EOF
    while (scanf("%d", &n) != EOF) {
        // 外层循环控制打印的行数
        for (int i = 1; i <= n; i++) {
            // 打印空格,使星号居中
            for (int j = 0; j < (n - i) * 2; j++) {
                printf(" ");
            }
            
            // 打印星号,每行的星号数量为2*i - 1
            for (int k = 1; k <= 2 * i - 1; k++) {
                printf("* ");
            }
            
            // 每行结束后换行
            printf("\n");
        }
    }
    
    return 0; // 程序结束
}

代码 3 :

//对于有行有列的图形采用双循环,i控制行,j控制列
//对于这种金字塔,倒三角,我们可以先利用循环把空格打印出来,然后在相应的位置放上*.
#include<stdio.h>
int main()
{
    int i,j,n;
     while (scanf("%d", &n) != EOF) {
        for (int i = 0; i < n; i++) {  //行
            for (int j = 0; j <n - i-1; j++) {//列,观察列与行的关系
                printf(" ");
            }
            for (int j = 0; j<= i; j++) {
                printf("* ");
            }
            printf("\n");
        }
    }
}


-----------------------------------------------------------------------------

#include <stdio.h> // 引入标准输入输出库函数

int main() // 主函数开始
{
    int i, j, n; // 定义三个整型变量i, j, n,分别用于控制行数,列数和读取用户输入的金字塔边长

    // 使用while循环处理多组输入直到文件结束符EOF
    while (scanf("%d", &n) != EOF)
    {
        // 外层循环,控制金字塔的行数,从0到n-1
        for (int i = 0; i < n; i++)
        {
            // 内层第一个循环,控制每行前面的空格数量
            // 空格的数量为n - i - 1,随着行数增加,前面的空格减少
            for (int j = 0; j < n - i - 1; j++) // 列循环,打印空格
            {
                printf(" "); // 打印一个空格
            }

            // 内层第二个循环,控制每行打印星号的数量
            // 星号的数量为i + 1,随着行数增加,星号数量增加
            for (int j = 0; j <= i; j++) // 列循环,打印星号和空格
            {
                printf("* "); // 打印一个星号和一个空格
            }

            printf("\n"); // 每行结束后打印换行符,以便开始新一行的打印
        }
    }

    return 0; // 主函数结束,返回0表示程序正常退出
}

程序使用while循环来处理多组输入,直到遇到EOF。在每次循环中,首先读取用户输入的整数n,这个整数表示金字塔一边的长度。

外层for循环控制打印金字塔的行数,从第0行开始直到第n-1行。对于每一行,首先是内层第一个for循环,用于打印空格,空格的数量为n - i - 1

接着是内层第二个for循环,用于打印星号和空格,星号的数量为i + 1

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

当所有行都打印完毕后,while循环结束,程序返回0,表示正常退出。

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1790446.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言实战:贪吃蛇(万字详解)

&#x1f4a1;目录 效果图 界面设计思路 1. 基本布局 2. 视觉元素 游戏机制设计 基本规则 游戏代码 前期准备 游戏代码详解 数据结构设计 宏定义 数据结构定义 函数原型&#xff08;详见后文&#xff09; 主函数代码 核心代码 Review 效果图 界面设计思路 1. 基…

VMD-PSO-LSTM单维时序预测模型(单输入单输出)-附代码

VMD-PSO-LSTM单维时序预测模型&#xff08;单输入单输出&#xff09; 1&#xff09;首先对原始单维数据进行VMD分解&#xff0c;分解为K个模态分量和1个残差分量 2&#xff09;将各个模态分量输入模型&#xff0c;建立模型进行预测 3&#xff09;将各个预测结果相加得到最终…

Redis-02

redis安装包位置 /opt/redis-7.2.5 redis默认安装路径&#xff1a; 配置文件路径&#xff1a;/usr/local/bin/redisconfig gcc安装位置 /opt/rhwindows在D:\bs\code\Redis\Redis-x64-3.2.100目录下 启动&#xff1a;进入redis安装目录--->cmd打开--->输入"redis-s…

【面试笔记】C++ 软件开发工程师,智驾研发方向(非算法)

文章目录 1. 前言2. 基础问题2.1 什么是C++中的类?如何定义和实例化一个类?2.2 请解释C++中的继承和多态性。2.3 什么是虚函数?为什么在基类中使用虚函数?2.4 解释封装、继承和多态的概念,并提供相应的代码示例。2.5 如何处理内存泄漏问题?提供一些常见的内存管理技术。2…

【Java】数据加密

目录 数据加密介绍使用场景密码学历史古代密码学凯撒密码例子特点 维吉尼亚密码原理例子特点 现代密码学介绍 现代密码学的加密算法分类哈希算法优点缺点代码示例【封装写法】 对称加密算法对称加密算法的加密过程解密过程对称加密算法的优点&#xff1a;对称加密算法的缺点&am…

【C语言】结构体(及位段)

你好&#xff01;感谢支持孔乙己的新作&#xff0c;本文就结构体与大家分析我的思路。 希望能大佬们多多纠正及支持 &#xff01;&#xff01;&#xff01; 个人主页&#xff1a;爱摸鱼的孔乙己-CSDN博客 欢迎 互粉哦&#x1f648;&#x1f648;&#xff01; 目录 1. 声明结构…

LeetCode-43. 字符串相乘【数学 字符串 模拟】

LeetCode-43. 字符串相乘【数学 字符串 模拟】 题目描述&#xff1a;解题思路一&#xff1a;模拟乘法&#xff0c;两个数中每一位数相乘的时候乘上他们各自的进制数&#xff0c;之后求和。循环时&#xff0c;分别记录各自的进制数背诵版&#xff1a;解题思路三&#xff1a;0 题…

hcia datacom学习(12):vlan间路由

不同vlan相当于不同网段&#xff0c;如果vlan间没有三层技术&#xff0c;那么它们就无法互相通信。 vlan间路由可以有3种方式&#xff1a; 1.直接使用路由器转发 *路由器本身不需要额外设置&#xff0c;只需配置端口ip作为网关即可。 *路由器不能处理带有vlan标签的数据帧&a…

Linux下SpringBoot项目部署(centos系统)

一、首先找到自己的sql文件&#xff0c;没有就从数据库挪进来 二、在Maven下打包一下&#xff08;点击package&#xff09;&#xff0c;看到BUILD SUCCESS就是打包好了 三、将上面两个文件分别挪到 linux 中对应的文件&#xff0c;没有就创建一个&#xff08;我的是spring_blog…

centos安装部署Mysql8详细教程

文章目录 一、下载安装1.下载2.安装 二、常见问题1.You must reset your password using ALTER USER statement before executing this statement2.IP is not allowed to connect to this mysql 结尾 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、…

【初识Objective-C】

Objective-C学习 什么是OCOC的特性OC跑的第一个程序helloworld OC的一些基础知识标识符OC关键字数据类型字符型c字符串为什么NSString类型定义时前面要加和普通的c对象有什么区别 一些基础知识if语句switch语句三种循坏语句for循环&#xff1a;用于固定次数的循环while循环&…

转让北京防水防腐保温工程施工二级资质流程和要求

防水资质全称叫作防水防腐保温专业承包二级资质&#xff0c;办理的条件和要求相对于其他专业的资质门槛比较低&#xff0c;如果条件允许建议企业直接新办&#xff0c;因为转让还是有一定风险存在&#xff0c;防水二级资质转让的费用取决于多个因素&#xff0c;如地区、市场需求…

HarmonyOS(30) @LocalStorageLink使用指南

这里写目录标题 LocalStorageLink。使用示例参考资料 LocalStorageLink。 LocalStorage是页面级的UI状态存储&#xff0c;通过Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。而LocalStorageLink则是LocalStorage 相关装饰器之一。LocalStorageLink装饰的变量…

低代码开发平台一般都有哪些功能和模块?

在当今快速变化的数字化时代&#xff0c;企业对于高效、灵活且经济的软件开发解决方案的需求愈发迫切。低代码开发平台应运而生&#xff0c;成为众多企业实现数字化转型的首选工具。本文将详细探讨低代码开发平台一般具备的主要功能和模块&#xff0c;以及它们如何助力企业提升…

Java数据结构-哈希表

目录 1. 概念2. 哈希冲突2.1 冲突的避免2.1.1 设计合理的哈希函数2.1.2 降低负载因子 2.2 冲突的解决-闭散列2.3 冲突的解决-开散列 3. 哈希桶的实现 1. 概念 哈希表&#xff08;Hash table&#xff0c;也叫散列表&#xff09;&#xff0c;是根据关键码值(Key)而直接进行访问的…

反激变压器的设计要点

反激电源的设计最关键的就是在于开关电源的变压器&#xff0c;我们对于反激电源变压器的设计计算的最终目的是为了得到一下几点&#xff1a; 1 原边和副边的电流波形 2 原边和副边的电压波形或幅值 3 磁通密度状况 &#xff08;我们选择的磁芯是不是饱和了&#xff0c;是不是…

Matplotlib | 绘制柱状图

简介 安装 Matplotlib 开始绘制 简单柱状图 改变颜色 改变纹理 改变边框样式 改变透明度 改变柱子宽度 改变图表标题 ​编辑 并列柱状图 横向柱状图 堆叠柱状图 更多函数 简介 柱状图&#xff08;Bar chart&#xff09;&#xff0c;是一种以长方形的长度为变量的…

基于JSP的人才公寓管理系统

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有需求可以文末加我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;浏览器&#xff08;如360浏览器、谷歌浏览器、QQ浏览器等&#xff09;、MySQL数据库 系统展示 …

实时数据传输:Django 与 MQTT 的完美结合

文章目录 准备工作创建 Django 项目与应用设置 MQTT 服务器编写 Django 视图编写前端模板发布 MQTT 消息运行 Django 项目 在当今互联网应用中&#xff0c;实时数据传输已经成为许多项目的核心需求。无论是社交媒体平台、在线游戏、金融交易还是物联网设备&#xff0c;都需要及…

OneCommander使用与安装手册

OneCommander使用与安装手册 一、引言 OneCommander是一款专为Windows 10和Windows 11用户设计的现代化文件管理器&#xff0c;它提供了直观、高效的文件浏览和管理体验。本手册将指导您完成OneCommander的安装过程&#xff0c;并介绍其主要功能和操作方法。 二、安装前准备…