牛客网刷题 | 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,表示正常退出。

  

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值