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

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

        专栏如下:                 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,表示正常退出。

  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

共计3万字!从零开始创建一个小规模的稳定扩散模型!

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学。 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 合集&#x…

知识运维概述

文章目录 知识运维研究现状技术发展趋势 知识运维 由于构建全量的行业知识图谱成本很高&#xff0c;在真实的场景落地过程中&#xff0c;一般遵循小步快走、快速迭代的原则进行知识图谱的构建和逐步演化。知识运维是指在知识图谱初次构建完成之后&#xff0c;根据用户的使用反馈…

“手撕”链表的九道OJ习题

目录 1. 第一题 2. 第二题 3. 第三题 4. 第四题 5. 第五题 6. 第六题 7. 第七题 8. 第八题 9. 第九题 1. 第一题 删除链表中等于给定值 val 的所有节点。OJ链接 思路如下&#xff1a; 相当于链表的removeAll();制定prev和cur&#xff0c;prev记录前一个节点&#xff…

2024最新VMware Workstation Pro下载教程

自从2024年5月份之后&#xff0c;VMware workstation player就不能直接在vm官网下载,需要到broadcom博通网站上下载 下面介绍最新下载步骤&#xff1a; 百度直接搜索vmware 进入官网点击Workstation Pro链接 博通注册对应的账号 现在下载都需到博通注册对应的账号 登录邮…

网络原理-TCP/IP --应用层

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 今天你敲代码了吗 目录 3.网络原理 -TCP/IP3.1 应用层 3.网络原理 -TCP/IP 3.1 应用层 应用层是程序员打交道最多的一层,与应用程序直接相关 而应用层的协议,实际上就规定了你写的程序,通过网络传输的时候,按…

使用 Scapy 库编写 IP 地址欺骗攻击脚本

一、介绍 1.1 概述 IP地址欺骗&#xff08;IP Spoofing&#xff09;是一种网络攻击技术&#xff0c;攻击者伪造其数据包的源IP地址&#xff0c;使其看起来像是从其他合法地址发送的。这种技术常用于各种攻击中&#xff0c;例如DDoS攻击、Man-in-the-Middle&#xff08;MITM&a…

271 基于matlab的可调Q因子小波变换故障诊断

基于matlab的可调Q因子小波变换故障诊断&#xff0c;可用在轴承、齿轮、活塞等故障诊断中&#xff0c;程序中包含了原始TQWT工具箱和轴承振动信号信号的谱包络的求取。通过仿真数据、实际轴承数据说明了方法的效果。程序已调通&#xff0c;可直接运行。 271 可调Q因子小波变换 …

算法第三天力扣第69题:X的平方根

69. x 的平方根 (可点击下面链接或复制网址进行做题) https://leetcode.cn/problems/sqrtx/https://leetcode.cn/problems/sqrtx/ 给你一个非负整数 x ,计算并返回 x 的 算术平方根 。 由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。 注意:不允许使用任何内…

Gavin Wood 访谈|Polkadot 从何而来,又将如何面对 AI 时代?

如果没有宏观经济&#xff0c;加密世界可能无法存在。或许&#xff0c;Satoshi Nakamoto 也永远不会写出那篇开创性的白皮书。区块链技术作为指数时代的核心之一&#xff0c;在宏观经济理论中占有重要地位。传统的经济增长公式是人口增长加生产率增长加债务增长。然而&#xff…

32【Aseprite 作图】石头——拆解

1 石头先画轮廓&#xff0c;还是2 4 1 1 2 2 2&#xff0c;这样画一个圆的轮廓 或者2 1 1 3 5 1 1 1 1 2 4 &#xff0c; 2 最暗一层的黑色&#xff0c;做阴影部分&#xff0c;就是7 4 3 2 做最深的部分 各个地方画一些浅色的&#xff0c;做高光部分&#xff0c;上面的高光偏圆…

依赖管理包介绍

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 相关组件 3. 示例代码4. 内容总结 我们在上一章回中介绍了"使用get进行依赖管理"相关的内容&#xff0c;本章回中将介绍如何使用get进行状态管理一.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 …

【计算机毕设】SpringBoot海滨体育馆管理系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 引言 体育馆作为重要的体育场馆&#xff0c;承担着举办体育赛事、健身活动和文化演出等多种功能。为了提高体育馆的管理效率和服务质量&#xff0c;本项目旨在…

2024-05-31 blue-VH-driver-问题分析-有状态的服务-状态的处理

摘要: VH的driver对上层提供的接口&#xff0c;是会保持状态。这个状态&#xff0c;可以分为&#xff0c;查询的数据的状态&#xff0c;主要是为了提供翻页查询的功能。另一种状态&#xff0c;就是订阅。 有状态的服务: 状态是什么? 其实从调用方的角度更好的理解&#xff0c…

进程与线程(三)

进程与线程&#xff08;三&#xff09; 进程间通信传统间的进程间通信机制无名管道无名管道的特征无名管道的创建父子进程通信测试管道的大小管道读写易出现的问题 有名管道创建有名管道有名管道的写端代码有名管道的读端代码 信号信号的特征产生信号硬件来源软件来源发送信号的…

【MATLAB】概述1

非 ~ 注释 % 定义 >> 数组 赋值 赋值&#xff1a;>> x1 函数 数组 x[x1,x2] 行向量&#xff08;&#xff0c;or ) x[x1;x2] 列向量 x. 转置等间隔向量 1-10 向量&#xff1a;>>xlinspace(1,10,10) 矩阵 矩阵&#xff1a;>>A[1,2,3;4,5,6;7,8,9] …

重生之 SpringBoot3 入门保姆级学习(10、日志基础与使用)

重生之 SpringBoot3 入门保姆级学习&#xff08;10、日志基础使用&#xff09; 3.1 日志基础3.2 使用日志3.2.1 基础使用3.2.2 调整日志级别3.2.3 带参数的日志 3.1 日志基础 SpringBoot 默认使用 SLF4j&#xff08;Simple Logging Facade for Java&#xff09;和 Logback 实现…

Django ORM魔法:用Python代码召唤数据库之灵!

探索Django ORM的神奇世界&#xff0c;学习如何用Python代码代替复杂的SQL语句&#xff0c;召唤数据库之灵&#xff0c;让数据管理变得轻松又有趣。从基础概念到高级技巧&#xff0c;阿佑带你一步步成为Django ORM的魔法师&#xff0c;让你的应用开发速度飞起来&#xff01; 文…

Adobe Acrobat DC无法卸载

控制版面、电脑管家等均无法卸载&#xff0c;使用自身的remove也不能卸载 解决方法&#xff1a;删除Adobe Acrobat DC的注册表 1、首先打开注册列表&#xff1a; 2、根据圈出来的信息&#xff0c;找到以下路径&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Inst…

c++车票管理系统

这里写自定义目录标题 c车票管理系统vx:sredxc车票管理系统初始页面,需要源码vx:sredxc新增车票信息查询车票信息代码包含完整的发布车票信息,购票,退票,票数检测,余票检测,车票查询等功能 c车票管理系统vx:sredxc 这段代码实现了一个简单的高铁票务管理系统&#xff0c;具有以…

动态路由OSPF单区域和多区域配置实验

动态路由OSPF的配置 OSPF分类两种情况&#xff1a;单区域 多区域路由 OSPF单区域路由配置 OSPF&#xff1a;开放最短路径优先的路由协议。属于大型动态路由协议&#xff0c;适用于中大型的园区网。 网络拓扑&#xff1a; 配置步骤&#xff1a; 1.完成基本配置&#xff08;略&…