牛客网刷题 | BC105 菱形图案

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

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

感谢阅读!

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


 描述

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

输入描述:

多组输入,一个整数(2~20)。

输出描述:

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


思路 :

可以分成两个部分来看 上面是n行 下面是n+1行

for(j=0;j<n-i;j++)

//如果这里要打印四个空格 4-0=4 三个空格4-1=3 两个空格4-2=2

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

//因为这里j都是每次从0开始的

//当i为0的时候打印零个 为1的时候打印一个 为2的时候打印两个

//......

//i随着变化而变化

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

//打印空格

//当i为0的时候不打印 当i为1的时候打印一个空格

//当i为2的时候打印两个 ......

for(j=0;j<n+1-i;j++)

//这里是因为是n+1行 所以要写成n+1

//这里是5的时候 i为0 就打印五个

//为4的时候 i为1 打印四个

//为3的时候 i为2 打印三个

//......


1. 理解菱形图案的结构

菱形图案由两部分组成:上半部分和下半部分。上半部分从中间的1个星号开始,每行递增一个星号,直到达到最宽行(星号数量等于输入的整数)。下半部分则从最宽行开始,每行递减一个星号,直到回到中间的1个星号。

2. 输入处理

程序需要读取用户输入的整数(2~20),这个整数代表菱形最宽行的星号数量。由于可能有多次输入,所以使用while循环结合scanf函数来持续读取输入,直到遇到文件结束符EOF。

3. 打印上半部分

  • 初始化行数变量i为0。
  • 使用for循环,从0开始递增,直到达到最宽行(i < n)。
  • 在每行开始,首先打印空格,空格数量为n - i - 1。这是因为菱形是中心对称的,需要在星号两侧留出相应的空格以保持图案居中。
  • 接着打印星号,星号数量为i + 1,使用内层for循环实现,每打印一个星号后跟一个空格。
  • 每行结束后打印换行符\n

4. 打印下半部分

  • 下半部分的打印逻辑与上半部分类似,但是行数递减,星号数量也随之递减。
  • 使用另一个for循环,从n - 1开始递减,直到1(i > 0)。
  • 同样首先打印空格,空格数量为i - 1
  • 然后打印星号,星号数量为n - i,使用内层for循环实现,每打印一个星号后跟一个空格。
  • 每行结束后打印换行符\n

代码 1 :

/*思路 : 可以分成两个部分来看 上面是n行 下面是n+1行
for(j=0;j<n-i;j++)
//如果这里要打印四个空格 4-0=4 三个空格4-1=3 两个空格4-2=2
for(j=0;j<=i;j++)
//因为这里j都是每次从0开始的 
//当i为0的时候打印零个 为1的时候打印一个 为2的时候打印两个
//......
//i随着变化而变化
 for(j=0;j<i;j++)
//打印空格
//当i为0的时候不打印 当i为1的时候打印一个空格
//当i为2的时候打印两个 ......
for(j=0;j<n+1-i;j++)
//这里是因为是n+1行 所以要写成n+1
//这里是5的时候 i为0 就打印五个
//为4的时候 i为1 打印四个
//为3的时候 i为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;
        //先打印空格
        for(j=0;j<n-i;j++)
        //如果这里要打印四个空格 4-0=4 三个空格4-1=3 两个空格4-2=2
        //......
        {
            printf(" ");
        }
        //接下来打印 空格+星号
        for(j=0;j<=i;j++)
        //因为这里j都是每次从0开始的 
        //当i为0的时候打印零个 为1的时候打印一个 为2的时候打印两个
        //......
        //i随着变化而变化
        {
            printf("* ");
        }
        printf("\n");
    }
        //下半部分
        //n+1 行
        //依旧是有空格加型号组成的
        for(i=0;i<n+1;i++)
        {
            int j = 0;
            for(j=0;j<i;j++)
            //打印空格
            //当i为0的时候不打印 当i为1的时候打印一个空格
            //当i为2的时候打印两个 ......
            {
                printf(" ");
            }
            for(j=0;j<n+1-i;j++)
            //这里是因为是n+1行 所以要写成n+1
            //这里是5的时候 i为0 就打印五个
            //为4的时候 i为1 打印四个
            //为3的时候 i为2 打印三个
            //......
            {
                printf("* ");
            }
            printf("\n");
        }
        
    }

    return 0;
}

 代码 2 :

#include <stdio.h>

int main() {
    int n;
    // 处理多组输入直到EOF
    while (scanf("%d", &n) != EOF) {
        int i, j; // 定义循环变量i和j

        // 打印菱形的上半部分
        for (i = 0; i < n; i++) {
            // 打印空格
            for (j = 0; j < n - i - 1; j++) {
                printf(" ");
            }
            // 打印星号和空格
            for (j = 0; j <= i; j++) {
                printf("* ");
            }
            printf("\n"); // 换行
        }

        // 打印菱形的下半部分
        for (i = n - 1; i > 0; i--) {
            // 打印空格
            for (j = 0; j < i - 1; j++) {
                printf(" ");
            }
            // 打印星号和空格
            for (j = 0; j < n - i; j++) {
                printf("* ");
            }
            printf("\n"); // 换行
        }
    }
    return 0; // 程序结束
}

这段代码首先包含了stdio.h头文件,定义了主函数main

然后,程序使用while循环来读取输入直到EOF。

外层for循环首先控制打印菱形的上半部分,内层两个for循环分别用来打印空格和星号。接着,另一个外层for循环控制打印菱形的下半部分。

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

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

代码 3 :

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

int main() // 主函数开始
{
    int n = 0; // 定义一个整型变量n,用于存储用户输入的菱形最宽处的星号数量
    while(scanf("%d",&n) != EOF) // 使用while循环处理多组输入直到文件结束符EOF
    {
        // 打印菱形的上半部分,包括中间行
        for (int i = 0; i < n + 1; i++) // 循环从0到n,包括n,打印上半部分和中间行
        {
            // 打印前面的空格,使星号居中
            for (int j = 0; j < n - i; j++)
            {
                printf(" ");
            }
            // 打印星号,星号数量从0开始递增,等于当前行号i
            for (int j = 0; j <= i; j++)
            {
                printf("* ");
            }
            printf("\n"); // 每行结束后换行
        }
        
        // 打印菱形的下半部分
        for (int i = 0; i < n; i++) // 循环从0开始到n-1,打印下半部分
        {
            // 打印前面的空格,使星号居中
            for(int j = 0; j <= i; j++)
            {
                printf(" ");
            }
            // 打印星号,星号数量从n-1开始递减,等于n-i-1
            for (int j = 0; j < n - i - 1; j++) // 这里j的初始值应为0,因为星号数量从n-i-1开始
            {
                printf("* ");
            }
            printf("\n"); // 每行结束后换行
        }
    }
    
    return 0; // 主函数结束,返回0表示程序正常退出
}

  

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

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

相关文章

VMware Workstation中WinXP联网问题

我一直以为我的虚拟机上的XP没有联网 因为 蒙了半天&#xff0c;发现是因为这个网址打不开&#xff0c;不是没有网 太傻了 不如在cmd命令行中通过ping baidu.com来判断是否联网

Vue插槽与作用域插槽

title: Vue插槽与作用域插槽 date: 2024/6/1 下午9:07:52 updated: 2024/6/1 下午9:07:52 categories: 前端开发 tags:VueSlotScopeSlot组件通信Vue2/3插槽作用域API动态插槽插槽优化 第1章&#xff1a;插槽的概念与原理 插槽的定义 在Vue.js中&#xff0c;插槽&#xff08;…

【多目标跟踪】《FlowMOT: 3D Multi-Object Tracking by Scene Flow Association》论文阅读笔记

0.论文 论文地址链接:https://arxiv.org/pdf/2012.07541v1 通过流的方式跟踪是一个比较新颖的点,所以这里比较关注运动跟踪,是如果做到流的跟踪来预测目标的位置以及ID绑定的。 FlowMOT的框架结构如下所示,本中会主要关注下运动跟踪、数据关联、ID分配、新生/消亡…

cmd窗口输出内容乱码问题

出现这样的问题是因为编码格式和解码格式不一样导致的&#xff0c;cmd窗口的默认解码格式为GBK&#xff0c;如想修改cmd默认编码格式可以按照下面步骤操作&#xff1a;打开cmd窗口输入&#xff1a;chcp 65001 65001指的是utf-8编码如果不清楚编码对应的 页面编码是是多少&#…

基于51单片机和NRF24L01的无线温度监控设计

一、设计功能 由单片机、温度传感器、无线模块NRF24L01以及液晶显示器等构成高精度远 程无线温度监测系统。 温度显示精确到小数点后一位。 按键设定过温值&#xff0c;过温在液晶屏提示。 系统设计 三、器件选择3.1温度信号采集模块 传统的温度检测大多以热敏电阻为传感器&a…

4K高刷显示器 - 蚂蚁电竞ANT27VU

可以毫不夸张地说&#xff0c;每一局游戏最终能够取得胜利&#xff0c;实际上都与一套极为优秀的电竞 PC 有着紧密的关联&#xff0c;因为其能够提供强大的性能支持与流畅的体验。同样的道理&#xff0c;一套优秀的电竞 PC 若想发挥出最佳的效果&#xff0c;那也都离不开一台能…

14.Ollydbg的基本使用

上一个内容&#xff1a;13.优化界面化的游戏辅助 Ollydbg是一个调试工具&#xff0c;它可以一步一步的运行一个程序并且还能很直观的看到被调试程序的寄存器状态、栈状态。Ollydbg需要以管理员方式运行&#xff01; 下图附加程序是调试一个正在运行的进程&#xff1a; 点击了…

适合学生写作业的台灯有哪些?台灯怎么选详细攻略!

在数字化飞速发展的今天&#xff0c;孩子们的学习和生活越来越离不开电子屏幕。然而&#xff0c;长时间盯着屏幕&#xff0c;不仅容易让眼睛感到疲劳&#xff0c;更是近视问题日益严重的元凶之一。每一位家长都希望孩子能拥有健康的视力&#xff0c;因此会为孩子挑选一台护眼灯…

【UML用户指南】-04-从代码到UML的关键抽象

1、关键抽象 声明了一个名为paint的操作&#xff0c;它的实现调用名为drawString的另一个操作&#xff0c;drawString操作负责在指定的位置上打印“Hello,World!”。在通常的面向对象的方式下&#xff0c;drawString是一个名称为g的参数上的一个操作&#xff0c;g的类型是类Gr…

写字静不下心?不如试试这些“笨方法”

夏天悄悄热起来啦&#xff5e;有人说&#xff0c;想踏踏实实写一会儿&#xff0c;但又静不下心&#xff0c;耐不住性子&#xff0c;快收下这四个小锦囊&#xff0c;与古人一起笨拙精进吧&#xff01;    1、不论输赢      每次课前&#xff0c;暄桐林曦老师总会强调&am…

VS(visual studio)搭建QT开发环境插件安装

优先安装QT Qt6 官网QtCreator 下载与安装方法win10_qt6下载-CSDN博客 如果安装vs2019,打开installer,安装c环境 选择c 下载vsix后&#xff0c;双击安装即可。 插件下载&#xff1a; Index of /qtproject/official_releases/vsaddin/ 创建QT项目&#xff1a; 创建完成&…

教你搞一个比较简单的计时和进度条装饰器

教你搞一个比较简单的计时和进度条装饰器 什么是装饰器为啥要用装饰器呢&#xff1f;上代码&#xff01;如何使用装饰器效果 什么是装饰器 装饰器的英文是&#xff1a;Decorator。装修的英文是&#xff1a;Decoration。顾名思义就是我们要用装饰器在函数func()上搞点儿事儿&am…

「Django秘境探险:揭开Web开发的神秘面纱」

大家好&#xff0c;我是阿佑&#xff0c;今天将和大家一块学习到如何利用Django框架的高级特性&#xff0c;构建出既快速又安全的Web应用。我们将一起破解Django的内部机制&#xff0c;掌握从数据模型到模板设计的每一个环节。准备好了吗&#xff1f;Let’s go &#xff01; 文…

算法(二)二分查找

文章目录 二分查找简介实现方式循环方式递归方式 经典例子 二分查找简介 二分查找&#xff08;binary search&#xff09;算法&#xff0c;也叫折半算法。二分查找是针对有序的数据集合的查找办法&#xff0c;如果是无序的数据结合就使用遍历。二分查找之所以快速&#xff0c;…

Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)

前言&#xff1a; Dijkstra算法博客讲解分为两篇讲解&#xff0c;这两篇博客对所有有难点的问题都会讲解&#xff0c;小白也能很好理解。看完这两篇博客后保证收获满满。 第一篇博客讲解朴素Dijkstra算法Dijkstra求最短路篇一(全网最详细讲解两种方法&#xff0c;适合小白)(p…

原码一位乘法(计算机组成原理)

算法原理 每次将1位乘数所对应的部分积与原部分积的“累积和”相加&#xff0c;并移位 设置寄存器 存放部分积累积和、乘积高位存放被乘数存放乘数、乘积低位 法则 乘积的数值位俩数绝对值之积&#xff1b;符号位 位 俩数符号位进行异或&#xff0c;即 p x ⊕ y 步骤 设…

零代码本地搭建AI大模型,详细教程!普通电脑也能流畅运行,中文回答速度快,回答质量高...

你好&#xff0c;我是郭震 这篇教程主要解决&#xff1a; 1). 有些读者朋友&#xff0c;电脑配置不高&#xff0c;比如电脑没有配置GPU显卡&#xff0c;还想在本地使用AI&#xff1b; 2). Llama3回答中文问题欠佳&#xff0c;想安装一个回答中文问题更强的AI大模型。 3). 想成为…

Frida使用与解题

对于 Android 逆向&#xff0c;首先需要熟悉对于 adb 基本命令使用 1.C:\Users\sun>adb shell ASUS_I003DD:/ # getprop ro.product.cpu.abi x86_64 查看架构 exit 退出 2. adb push "E:\reverse\ida\IDA_Pro_7.7\IDA_Pro_7.7\IDA_Pro_7.7\dbgsrv\android_x86_ser…

通用代码生成器应用场景四,跨编程语言翻译

通用代码生成器应用场景四&#xff0c;跨编程语言翻译 如果您有一个Java工程&#xff0c;想把它移植到Rust或Golang语言中去&#xff0c;希望尽可能加快研发速度。 如果您的系统是通用代码生成器开发的&#xff0c;保留了系统的SGS源文件或者SGS2的Excel模板&#xff0c;您可…

【Redis】 使用Java操作Redis的客户端

文章目录 &#x1f343;前言&#x1f334;项目的创建&#x1f38b;引入依赖&#x1f333;配置端⼝转发&#x1f332;更改 Redis 配置文件&#x1f384;连接 Redis Server⭕总结 &#x1f343;前言 我们使用 Java 操作 Redis 客户端时我们需要进行以下操作。 注意&#xff1a;J…