牛客网刷题 | BC100 直角三角形图案

2024-05-26 15:36

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

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

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

感谢阅读!

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


描述

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

输入描述:

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

输出描述:

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


解题思路 :

/*

依旧使用嵌套循环 一个控制行 一个控制列

这个就和乘法口诀表差不多了

只不过不需要输入乘法之类的东西

当用户输入一个数字之后就会进入for循环,判断是否小于等于i的值

当条件成立的时候,将进入第二条for循环,这里n<=j 的意思就是 从左到右打印 *

当条件不成立的时候就会跳出这个for循环,从第一层for循环开始,继续往下执行

其中最核心的地方就是两个圆圈圈起来的地方

如果把n<=j写成 n<=i 的话 就会一直打印,输入数字几,就会横着打印几个 *

和之前的题一样了

*/


代码 1 :

/*思路 : 依旧使用嵌套循环 一个控制行 一个控制列这个就和乘法口诀表差不多了只不过不需要输入乘法之类的东西
当用户输入一个数字之后就会进入for循环,判断是否小于等于i的值
当条件成立的时候,将进入第二条for循环,这里n<=j 的意思就是 从左到右打印 *
当条件不成立的时候就会跳出这个for循环,从第一层for循环开始,继续往下执行
其中最核心的地方就是两个圆圈圈起来的地方
如果把n<=j写成 n<=i 的话 就会一直打印,输入数字几,就会横着打印几个 *
和之前的题一样了
*/# include <stdio.h>
int main(){int i = 0;while (scanf("%d",&i)!=EOF){for(int j = 1; j <= i; j++)//控制列{for(int n = 1; n<=j;n++)//控制行{printf("* ");}printf("\n");}}return 0;
}
//————————————————————————————————————————————————————————————# include <stdio.h> // 包含标准输入输出库int main() // 主函数的开始
{int i = 0; // 定义一个整型变量i并初始化为0while (scanf("%d",&i)!=EOF) // 当输入不是文件结束符EOF时,循环读取i的值{for(int j = 1; j <= i; j++) // 外层循环,控制列数,从1开始到i结束{for(int n = 1; n<=j;n++) // 内层循环,控制每行打印的星号数量,从1开始到j结束{printf("* "); // 打印一个星号和一个空格}printf("\n"); // 每行打印完毕后,换行}}return 0; // 程序正常结束,返回0
}

代码 2 :


void print(int num)
{int i,j;for(i = 0; i < num; i++){for(j = 0; j < i +1; j++){printf("* ");}printf("\n");}
}int main()
{int num;while(scanf("%d",&num) != EOF){print(num);}return 0;
}//——————————————————————————————————————————————————————————————————————void print(int num) // 定义一个名为print的函数,它接受一个整型参数num
{int i,j; // 定义两个循环计数器i和jfor(i = 0; i < num; i++) // 外层循环,控制行数,从0到num-1{for(j = 0; j < i +1; j++) // 内层循环,控制每行打印的星号数量,从0到i{printf("* "); // 打印一个星号和一个空格}printf("\n"); // 每行打印完毕后,换行}
}int main() // 主函数的开始
{int num; // 定义一个整型变量num用于存储用户输入while(scanf("%d",&num) != EOF) // 当输入不是文件结束符EOF时,循环读取num的值{print(num); // 调用print函数,打印由星号组成的三角形}return 0; // 程序正常结束,返回0
}

这段代码的功能是:用户可以连续输入整数,每次输入后程序会调用print函数打印出一个由星号组成的三角形,三角形的高度由用户输入的整数决定。

当用户输入文件结束符EOF时,程序结束。


扩展 : 

如何解答图形问题

 1. 理解图案的几何特性

首先,你需要清楚地了解你想要打印的图案的几何特性。例如,一个简单的三角形图案可能具有以下特性:

  • 行数递增
  • 每行的星号数量递增
  • 星号之间可能有或没有空格
  • 可能需要在星号之间或图案周围打印空格以形成特定的形状

2. 设计循环结构

根据图案的特性,设计循环结构来控制打印过程。通常,这涉及到两个嵌套的循环:

  • 外层循环:控制图案的行数。例如,如果用户输入数字5,外层循环将执行5次。
  • 内层循环:控制每行打印的字符数量。例如,第一行打印1个星号,第二行打印2个星号,依此类推。

3. 使用条件语句

条件语句(如ifelse)可以用来控制打印的模式,特别是在需要根据当前行或列的特定条件来改变打印行为时。

4. 变量控制

使用变量来控制打印的模式,例如:

  • 使用变量来记录当前行应该打印的星号数量。
  • 使用变量来控制是否需要在星号之间或图案周围打印空格。

5. 字符串和数组

对于更复杂的图案,可以使用字符串数组来存储每一行的打印内容,然后再统一输出。这种方法可以更容易地管理和调整图案的格式。

6. 递归方法

对于一些可以递归定义的图案(如分形图案),递归函数可以是一种优雅且简洁的解决方案。

7. 图形库的使用

在某些编程语言中,可以使用图形库来简化图形的打印和绘制。这些库提供了更高级的抽象,可以更容易地创建复杂的图形。

8. 调试和测试

在开发过程中,逐步调试和测试代码:

  • 逐步执行:观察每一行代码的执行结果,确保循环和条件语句按预期工作。
  • 打印变量值:在关键点打印变量的值,以确保它们遵循正确的模式。
  • 调整逻辑:根据测试结果调整循环条件、条件语句或打印逻辑。

9. 优化和改进

一旦基本的图案打印正确,考虑优化代码:

  • 减少不必要的计算:例如,预先计算循环次数或星号数量,而不是在循环内部重复计算。
  • 改进可读性:使用清晰的变量名和函数名,添加注释,使代码易于理解和维护。

10. 用户交互

如果图案的打印依赖于用户输入,确保用户交互部分的代码健壮且易于使用:

  • 输入验证:确保用户输入的数据是有效的,并且符合预期的格式。
  • 错误处理:优雅地处理错误输入或异常情况。

  

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



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

相关文章

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

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的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