牛客网刷题 | BC101 翻转直角三角形图案

2024-05-29 08:44

本文主要是介绍牛客网刷题 | BC101 翻转直角三角形图案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

感谢阅读!

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


描述

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

输入描述:

多组输入,一个整数(2~20),表示翻转直角三角形直角边的长度,即“*”的数量,也表示输出行数。

输出描述:

针对每行输入,输出用“*”组成的对应长度的翻转直角三角形,每个“*”后面有一个空格。
 


思路 :

先打印一行 然后依次减少

橙色框框里面的一行代码我们都很容易能想出来,但主要的就是第二层for循环不太好想出来

拆解一下:

首先我先输入的是 3第一层for条件成立盾环:第二层for把i的值赋给j这里的意思就是跟随外层的for循环盾环:的i变化而化,因为i++是一直在进行++操作的

 

  1. 输入处理:程序需要能够接收多组输入,每组输入是一个整数(范围是2到20),表示翻转直角三角形直角边的长度,即每行输出的“*”的数量。

  2. 循环结构:我们需要使用循环来打印每一行的星号。循环的次数由输入的整数决定。

  3. 打印星号:在每次循环中,我们需要打印相应数量的星号,每个星号后面跟着一个空格。

  4. 递减星号数量:每一行的星号数量应该比上一行少一个,直到最后一行只有一个星号。

  5. 输出格式:确保每行的星号后面都有空格,并且星号的数量与输入的整数一致。


代码 1 :

# include <stdio.h>
int main (){int n = 0;while(scanf("%d",&n)!=EOF)
{for(int i = 0; i < n; i++)//每一列{for(int j = i;j<n;j++){printf("* ");}printf("\n");}
}return 0;
}#include <stdio.h> // 包含标准输入输出库,用于进行输入输出操作。int main() // 定义主函数,程序执行的入口点。
{int n = 0; // 定义一个整型变量n,并初始化为0。这个变量用来存储用户输入的三角形的边长。// 使用while循环来处理多组输入,直到输入结束(EOF代表文件结束,这里用来表示输入结束)。while(scanf("%d",&n)!=EOF){// 外层for循环,控制列数,从0开始,直到用户输入的n-1。for(int i = 0; i < n; i++){// 内层for循环,控制每行打印的星号数量。// 循环变量j从i开始,直到n-1,这样每行打印的星号数量逐渐增加。for(int j = i; j < n; j++){printf("* "); // 打印一个星号和一个空格。}printf("\n"); // 内层循环结束后,打印一个换行符,准备打印下一行。}}return 0; // 程序正常结束,返回0。
}

这段代码实现了一个简单的控制台程序,它可以接收用户输入的整数(代表三角形的边长),并打印出一个由星号组成的直角三角形图案。

程序使用while循环来处理多组输入,直到用户输入EOF(通常是通过在命令行中输入Ctrl+D(Linux/Mac)或Ctrl+Z(Windows)来发送EOF信号)。

每组输入后,程序会打印出相应大小的三角形图案。 

代码 2 :

#include<stdio.h>
int main()
{int a;while(scanf("%d",&a)!=EOF){for(int i = a;i>0;i--){for(int j = i;j>0;j--)printf("* ");printf("\n");}}return 0;
}#include<stdio.h> // 引入标准输入输出库stdio.h,它提供输入输出功能。int main() // 定义主函数main,程序从这里开始执行。
{int a; // 定义一个整型变量a,用于存储用户输入的三角形的边长。// 使用while循环来处理多组输入,直到输入结束(EOF代表文件结束标志)。while(scanf("%d",&a)!=EOF) {// 外层for循环,从用户输入的边长a开始递减,直到递减到1。for(int i = a; i > 0; i--) {// 内层for循环,从当前行的星号数量i开始递减,直到递减到1。for(int j = i; j > 0; j--) {printf("* "); // 打印一个星号和一个空格,形成翻转直角三角形的每一行。}printf("\n"); // 每行打印完成后,打印一个换行符,移动到下一行的开始位置。}}return 0; // 程序正常结束,返回0表示成功。
}

 扩展:

#include <stdio.h> // 包含标准输入输出库int main() {int n; // 定义一个整型变量n来存储用户输入的行数// 读取用户输入的行数scanf("%d", &n);// 使用for循环来控制行数for(int i = n; i > 0; i--) {// 内层循环,用于在每一行打印星号for(int j = 0; j < i; j++) {printf("* "); // 打印一个星号和一个空格}printf("\n"); // 完成一行的打印后,换到下一行}return 0; // 程序正常结束
}

现在,让我们逐步分析这段代码:

  1. #include <stdio.h>:这一行是预处理指令,它告诉编译器在实际编译之前包含标准输入输出库。这个库提供了scanfprintf等函数,允许程序执行输入和输出操作。

  2. int main() { ... }:这是C语言程序的主函数,程序的执行从这里开始。

  3. int n;:在main函数内部,我们声明了一个整型变量n,用来存储用户输入的翻转直角三角形的边长(即星号的数量)。

  4. scanf("%d", &n);:这行代码使用scanf函数从用户那里读取一个整数输入,并将其存储在变量n中。%d是格式字符串,指定了期望输入的类型是整数。&n是变量n的地址,scanf需要这个地址来知道在哪里存储读取的数据。

  5. for(int i = n; i > 0; i--) { ... }:这是一个for循环,它控制打印行数。循环的初始条件是int i = n,这意味着i的初始值是用户输入的行数。循环继续进行,只要i大于0。每次循环结束时,i--i的值减少1,这导致每行打印的星号数量逐渐减少。

  6. for(int j = 0; j < i; j++) { ... }:这是嵌套在上一个for循环内的第二个for循环,用于控制每行打印的星号数量。循环从j = 0开始,只要j小于i就继续进行。每次循环,j的值增加1。

  7. printf("* ");:在内层循环内部,这行代码打印一个星号和一个空格。由于内层循环每次迭代都会执行一次,所以它会打印出当前行应有的星号数量。

  8. printf("\n");:在内层循环结束后,这行代码打印一个换行符,将打印位置移动到下一行的开始处。

  9. return 0;:程序执行完所有的循环后,main函数返回0,表示程序正常结束。

  

这篇关于牛客网刷题 | BC101 翻转直角三角形图案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1013188

相关文章

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

牛客《剑指Offer》 -- 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 特别注意负数的情况,出现负数,将其转化为正数然后求倒数。 class Solution {public:double Power(double base, int exponent) {double total = 1;bool flag = false

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f

牛客网《剑指Offer》 矩形覆盖

题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution {public:int rectCover(int number) {if(number==0) return 0;if(number==1) return 1;if(number==2) return 2;retu

牛客《剑指Offer》 变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 根据 普通的跳台阶可以总结出 f(n) = f(n-1) + f(n-2) +f(n-3) + 。。。。+ f(1) +1 不妨设 f(0) = 1 , 则易得 class Solution {public:int jumpFloorII(int n

牛客《剑指Offer》 跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 递归思想,n阶梯子走法等于n-1 加上n-2的。 class Solution {public:int jumpFloor(int number) {if(number==1) return 1;if(number==2) return 2;return jumpFl