题干
KiKi想知道已经给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。
输入描述:
题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。
输出描述:
针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”。
示例
输入:
2 3 2
3 3 3
输出:
Isosceles triangle!
Equilateral triangle!
解法
初见思路
- 等边三角形三条边相等
- 等腰三角形其中两条边相等
- 只有当两条边之和小于等于第三边时三角形才成立
初见代码
#include <stdio.h>
int main() {
int a,b,c=0;
while(scanf("%d %d %d",&a,&b,&c)!=EOF)
//while这里是一个多组输入的写法,可以重复输入不同的三角形,与本题题干关系不大,故不深入研究
{
if (a==b && b==c)
//运行符&&表示且,即条件中必须所有同时成立才ok
printf("Equilateral triangle!\n");
else if (a==b || b==c || a==c)
//运行符||表示或,即条件中有一个条件是成立的就ok
printf("Isosceles triangle!\n");
else if (a+b<=c || a+c<=b || b+c<=a)
printf("Not a triangle!\n");
else
printf("Ordinary triangle!\n");}
return 0;
}
运行结果
- 很明显,最后一组数据出现了错误,本应是“Not a triangle!”的输出变成了“Isosceles triangle!”,此时,我们需要调整我们的代码思路:
思路一改
我们把思路1和3的顺序调换了一下:
- 只有当两条边之和小于等于第三边时三角形才成立
- 等边三角形三条边相等
- 等腰三角形其中两条边相等
代码一改
#include <stdio.h>
int main() {
int a,b,c=0;
while(scanf("%d %d %d",&a,&b,&c)!=EOF)
{
if (a+b<=c || a+c<=b || b+c<=a)
printf("Not a triangle!\n");
//原本在最下面的判断三角形移到了这里
else if (a==b && b==c)
printf("Equilateral triangle!\n");
else if (a==b || b==c || a==c)
printf("Isosceles triangle!\n");
else
printf("Ordinary triangle!\n");
}
return 0;
}
- 显然,修改后的思路一上来就先判断这组数字是不是三角形,如果是,再继续后面的判断,不是的话就直接输出。
运行结果
成功运行~~
写在最后
如果本文对您有帮助,可不可以给我一个小小的点赞呀❤~您的支持是我最大的动力。
博主小白一枚,才疏学浅,难免有所纰漏,欢迎大家讨论和提出问题,博主一定第一时间改正。
谢谢观看嘿嘿(๑•̀ㅂ•́)و✧~!