【深基3.习8】三角形分类

题目描述

给出三条线段 a,b,c 的长度,均是不大于 10000 的正整数。打算把这三条线段拼成一个三角形,它可以是什么三角形呢?

  • 如果三条线段不能组成一个三角形,输出Not triangle
  • 如果是直角三角形,输出Right triangle
  • 如果是锐角三角形,输出Acute triangle
  • 如果是钝角三角形,输出Obtuse triangle
  • 如果是等腰三角形,输出Isosceles triangle
  • 如果是等边三角形,输出Equilateral triangle

如果这个三角形符合以上多个条件,请按以上顺序分别输出,并用换行符隔开。

输入格式

输入 3 个整数 a、b 和 c。

输出格式

输出若干行判定字符串。

样例 1

样例输入 1

3 3 3

样例输出 1

Acute triangle
Isosceles triangle
Equilateral triangle

样例 2

样例输入 2

3 4 5

样例输出 2

Right triangle

样例 3

样例输入 3

6 10 6

样例输出 3

Obtuse triangle
Isosceles triangle

样例 4

样例输入 4

1 14 5

样例输出 4

Not triangle

提示

当两短边的平方和大于一长边的平方,说明是锐角三角形。

当两短边的平方和等于一长边的平方,说明是直角三角形。

当两短边的平方和小于一长边的平方,说明是钝角三角形。

解:

这道题很明显是一道很基础的题目,有一点知识就是:如何根据三边的长度来判断是锐角三角形还是钝角三角形。

如果最长边平方>另外两边的平方和,则这个三角形是钝角三角形

如果最长边平方<另外两边的平方和,则这个三角形是锐角三角形

自己没看答案写的程序(很丑陋,轻喷)

#include <stdio.h>
#include<math.h>
int maxn(int a,int b,int c)
{
	if(a>b && a>c)
	return a;
	if(b>a && b>c)
	return b;
	if(c>a && c>b)
	return c;
	if(a==b && b==c)
	return -1;
}
int main ()
{
	int a,b,c;
	scanf("%d %d %d",&a,&b,&c);
	if( (a+b)>c && (a+c)>b && (b+c)>a && (a-b)<c && (a-c)<b && (b-c)<a)
	{
		if( a*a+b*b==c*c || a*a+c*c==b*b || b*b+c*c==a*a)
		{
			printf("Right triangle\n");
			if(a==b || a==c || b==c)
			{
				printf("Isosceles triangle\n");
			}
		}
		if(2*pow(maxn(a,b,c),2)>a*a+b*b+c*c){
			printf("Obtuse triangle\n");
			if(a==b || a==c || b==c)
			{
				printf("Isosceles triangle\n");
			}			
		}
		if(2*pow(maxn(a,b,c),2)<a*a+b*b+c*c)
		{
			printf("Acute triangle\n");
			if(maxn(a,b,c)==-1)
			{
				printf("Isosceles triangle\n");
				printf("Equilateral triangle\n");
			}
			else if(a==b || a==c || b==c)
			{
				printf("Isosceles triangle\n");
			}
			 
		}
	} 
	else 
	{
		printf("Not triangle\n");
	}
	return 0;
}

然后看了大佬的解题过程之后:

思路就是先排序会写得更简单一点

#include <cstdio>
#include<algorithm>
using namespace std;
int main ()
{
	int a,b,c;
	scanf("%d%d%d", &a, &b, &c);
	int d[4]={-1,a,b,c};
	sort(d+1,d+4);
	if(d[1]+d[2]<=d[3]){
		printf("Not triangle\n");
		return 0;
	} 
	if(d[1]*d[1]+d[2]*d[2]==d[3]*d[3]) printf("Right triangle\n");
	else if(d[1]*d[1]+d[2]*d[2] > d[3]*d[3]) printf("Acute triangle\n");
	else if(d[1]*d[1]+d[2]*d[2] < d[3]*d[3]) printf("Obtuse triangle\n");
	if(d[1] == d[2] || d[2] == d[3]) printf("Isosceles triangle\n");
	if(d[1]==d[3]) printf("Equilateral triangle\n");
	return 0;
}

原文地址:http://www.cnblogs.com/Jinx8823/p/16875553.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性