每日算法刷题 Day2- 向上取整、三角形条件、字符串拼接匹配、三数排序思路
⭐每日算法题解系列文章旨在精选重点与易错的算法题,总结常见的算法思路与可能出现的错误,与笔者另一系列文章有所区别,并不是以知识点的形式提升算法能力,而是以实战习题的形式理解算法,使用算法。
4. 区间
给定一个浮点数,请你判断该数字属于以下哪个区间:[0,25],(25,50],(50,75],(75,100]。
如果给定的数值小于 0 或大于 100,则程序输出 Fora de intervalo
,表示超出范围。
开区间 (a,b):在实数 a 和实数 b 之间的所有实数,但不包含 a 和 b。
闭区间 [a,b]:在实数 a 和实数 b 之间的所有实数,包含 a 和 b。
输入格式
输入一个浮点数。
输出格式
判断输入数值位于哪个区间,按格式 Intervalo x
输出,其中 x 为区间范围 [0,25],(25,50],(50,75],(75,100]中的一个。
如果数值位于所有区间之外,则输出 Fora de intervalo
。
输入样例:
输出样例:
代码
思考:初始的表达方式过于冗余。同样这种方式也存在 a=0 时的冗余,但是总体来说 a=ceil 的向上取整方式可以借鉴。
5. 三角形
读取三个浮点数 A,B 和 C 并验证是否可以用它们形成三角形。
如果可能,则计算并输出三角形的周长:
如果不可能,则计算并输出以 A 和 B 为底以 C 为高的梯形面积:
输入格式
共一行,包含三个浮点数 A,B,C。
输出格式
按题目描述格式,输出答案,答案保留一位小数。
数据范围
0<A,B,C<100.0
输入\出样例
输入样例 1:
输出样例 1:
输入样例 2:
输出样例 2:
代码
错误:构成三角形的条件:两边之和>第三边,两边之差的绝对值<第三边,这样就无需考虑三边之间大小关系。
在学习 C 语言的 printf 输出的时候,转义符“\”无法使用,若要输出 %,需要使用两个百分号,即 %%。
6. 动物
给定你三个葡萄牙语单词,这些词将根据下表从左到右定义一个动物。
请你确定并输出这个动物的名称。
输入格式
根据上表,输入包含三个单词,每行一个,用以识别动物,单词由小写字母构成。
输出格式
输出识别出的动物的名称。
输入样例:
输出样例:
代码
总结
本题的进阶做法的关键点在于字符串拼接,以及如何实现 string 类型的首字母拼接。
string 定义 str[3]字符串数组,然后用 for 循环接受输入
string 定义拼接字符串数组,采用+=的方式拼接。
取首字母时可以想为 str 二维数组中的一项,由于 str 类型的变量也可以看作 char 类的数组,因此可以取具体某一项 str 中的第一个元素。
7. 三角形类型
读取表示三角形三条边的 33 个浮点数 A,B 和 C 并按降序排列,使 A 边是三边中最大的一边。
接下来,根据以下情况,确定它们可以组成的三角形类型:
如果 A≥B+C,则说明三条边不能构成三角形,请输出:
NAO FORMA TRIANGULO
否则,说明三条边可以构成三角形,然后按如下情况输出:
如果 A2=B2+C2,请输出:
TRIANGULO RETANGULO
如果 A2>B2+C22,请输出:
TRIANGULO OBTUSANGULO
如果 A2<B2+C2,请输出:
TRIANGULO ACUTANGULO
如果三个边长度都相同,请输出:
TRIANGULO EQUILATERO
如果只有两个边长度相同而第三个边长度不同,请输出:
TRIANGULO ISOSCELES
输入格式
共一行,包含三个浮点数 A,B,C。
输出格式
输出 A,B,C 组成的三角形的类型。
注意,上述条件可能满足不止一条,这种情况下将所有类型名称,按题目介绍顺序输出,每行输出一条。
数据范围
0<A,B,C≤10.0
输入样例:
输出样例:
代码
总结
此题容易忽略题目最初的条件,边的长度必须按降序排列,具体的排序过程可以采用 swap 函数实现,基本思路是先保证 a>b,再保证 a>c,使 a 为最大值,再保证 b>c 即可。在题目条件中多个判断条件之间需要注意是否存在同级关系。
专题往期合集:每日算法题解
版权声明: 本文为 InfoQ 作者【timerring】的原创文章。
原文链接:【http://xie.infoq.cn/article/8140711f08ccfcdd75090f5ad】。未经作者许可,禁止转载。
评论