洛谷刷题_三角形分类

【深基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;
}
posted @ 2022-11-09 23:07  Jinx8823  阅读(79)  评论(0)    收藏  举报