首页 > 试题广场 >

判断三角形类型

[编程题]判断三角形类型
  • 热度指数:7083 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给定三角形的三条边,a,b,c。判断该三角形类型。

输入描述:
测试数据有多组,每组输入三角形的三条边。


输出描述:
对于每组输入,输出直角三角形、锐角三角形、或是钝角三角形。
示例1

输入

3 4 5

输出

直角三角形
推荐
用勾股定理判定。
较小两边的平方和 小于 最长边的平方,则为 钝角
                 等于         则   直角
                 大于         则   锐角
代码如下:
#include <stdio.h>
#include <algorithm>
using namespace std;
int main() {
    int x[3];
    while(scanf("%d %d %d", x, x+1, x+2) != EOF) {
        sort(x, x+3);
        int min2 = x[0]*x[0] + x[1]*x[1];
        int max2 = x[2]*x[2];
        if(min2 > max2) {
            printf("锐角三角形\n");
        } else if(min2 == max2) {
            printf("直角三角形\n");
        } else {
            printf("钝角三角形\n");
        }
    }
    return 0;
} 


编辑于 2016-01-11 11:04:43 回复(1)
import java.util.Arrays;
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        final int NUM = 3; 
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            int[] tri = new int[NUM];
            int i = 0;
            while(i<NUM){
                tri[i++]=sc.nextInt();
            }
            judge(tri);
        }
    }
    public static void judge(int[] tri){
        Arrays.sort(tri);
        int judgeNum = tri[0]*tri[0] + tri[1]*tri[1] - tri[2]*tri[2];
        if(0 == judgeNum){
            System.out.println("直角三角形");
        }else if(0 > judgeNum){
            System.out.println("钝角三角形");
        }else{
            System.out.println("锐角三角形");
        }
    }
}

发表于 2018-08-02 23:04:49 回复(0)
#include<stdio.h>
int main()
{
    int a,b,c,t;
    scanf("%d%d%d",&a,&b,&c);
    if(a>b)//1.最大边放在c
    {t=a;a=b;b=t;}
    if(b>c)
    {t=b;b=c;c=t;}
    if(a*a+b*b==c*c)//2.勾股定理判定类型
        printf("直角三角形\n");
    else if(a*a+b*b<c*c)
        printf("钝角三角形\n");
    else
        printf("锐角三角形\n");
}

发表于 2020-04-08 10:55:55 回复(0)
#include<stdio.h>
int main (){//the shorter,the better.
    int a,b,c,m;
    for(;~scanf("%d%d%d",&a,&b,&c);m=a>b?(a>c?a:c):(b>c?b:c),a=a*a+b*b+c*c,b=2*m*m,printf("%s角三角形\n",a!=b?(a>b?"锐":"钝"):"直"));
}

发表于 2018-01-14 14:36:46 回复(1)
#include<stdio.h>

int main(){
    int x,y,z,max;
    scanf("%d %d %d",&x,&y,&z);
    if(x>y&&x>z)
        max = y*y+z*z-x*x;
    else if(y>z)
        max = x*x+z*z-y*y;
    else
        max = x*x+y*y-z*z;
    if(max ==0)
        printf("直角三角形");
    else if(max<0)
        printf("钝角三角形");
    else
        printf("锐角三角形");
    return 0;
}

发表于 2020-04-05 17:59:03 回复(0)
Java 
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            int[] a= new int[3];
            for (int i = 0; i < 3; i++) a[i]= scanner.nextInt();
            Arrays.sort(a);
            int x = a[0]*a[0]+a[1]*a[1];
            int y = a[2]*a[2];
            if (x<y) System.out.println("钝角三角形");
            else if (x==y) System.out.println("直角三角形");
            else System.out.println("锐角三角形");
        }
    }
}


发表于 2020-03-19 20:51:06 回复(0)
#include<bits/stdc++.h>

using namespace std;

int main()
{
    int n[3];
    for(int i = 0; i < 3; i++)
    {
        cin >> n[i];
    }
    sort(n, n + 3);
    int a = n[0];
    int b = n[1];
    int c = n[2];
    if(c * c == a * a + b * b)
    {
        cout << "直角三角形";
    }
    else if(c * c > a * a + b * b)
    {
        cout << "钝角三角形";
    }
    else
        cout << "锐角三角形";
    return 0;
}

发表于 2020-02-07 17:31:43 回复(0)
//主要就是要知道钝角锐角三角形是如何判定的
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
    int a[3];
    while(cin>>a[0]>>a[1]>>a[2]){
        sort(a,a+3);
        if(a[0]*a[0]>a[1]*a[1]+a[2]*a[2])
            cout<<"钝角三角形";
        if(a[0]*a[0]==a[1]*a[1]+a[2]*a[2])
            cout<<"直角三角形";
        if(a[0]*a[0]<a[1]*a[1]+a[2]*a[2])
            cout<<"锐角三角形";
    }
    return 0;
}

发表于 2020-01-12 22:29:47 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main(){
    int a[3];
    while(scanf("%d %d %d",&a[0],&a[1],&a[2])!=EOF){
        sort(a,a+3);
        if(a[0]*a[0]+a[1]*a[1]==a[2]*a[2])
            printf("直角三角形\n");
        else if(a[0]*a[0]+a[1]*a[1]>a[2]*a[2])
            printf("锐角三角形\n");
        else if(a[0]*a[0]+a[1]*a[1]<a[2]*a[2])
            printf("钝角三角形\n");
    }
}
发表于 2019-03-16 16:51:06 回复(0)
利用勾股定理,长边平方大于两个短边平方之和,是钝角三角形,等于是直角三角形,小于是锐角三角形。
#include <stdio.h>

int main()
{
    int a, b, c;
    int temp;
    while(scanf("%d %d %d", &a, &b, &c)!=EOF)
    {
        if(b>a&&b>c)
        {
            temp=b;
            b=a;
            a=temp;
        }
        else if(c>a&&c>b)
        {
            temp=c;
            c=a;
            a=temp;
        }
        //前面的顺序调整是为了保证a是最长边
        if(a*a>b*b+c*c) printf("钝角三角形\n");
        else if(a*a<b*b+c*c) printf("锐角三角形\n");
        else printf("直角三角形\n");
    }
    return 0;
}

发表于 2018-02-07 10:48:10 回复(0)
最长边对应最大角。 先让a最大,b次之,c最小。
再用余弦定理:最长边a的对应的余弦为正,说明该角为锐角,即整个三角形最大角为锐角,其他两个角就不用说了。余弦为负则说明a所对应的角为钝角,整体就为钝角三角形。余弦为0,就为直角。
#include<stdio.h>
int main(){
int a,b,c,t;
double ans;
while(scanf("%d %d %d",&a,&b,&c)!=EOF){
if(a<b)
{
t=a;a=b;b=t;
if(a<c)
{
t=a;a=c;c=t;
}
if(b<c)
{
t=b;b=c;c=t;
}
ans=(b*b +c*c-a*a)/2.0/a/b;
if(ans==0)
 printf("直角三角形\n");
else if(ans<0)
 printf("钝角三角形\n");
else  
 printf("锐角三角形\n");
   }
return 0;
发表于 2016-03-04 17:21:33 回复(1)
#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main() {
    int a, b ,c;
    while (cin >> a >> b>>c) {
       vector<int>triangle={a,b,c};
       sort(triangle.begin(),triangle.end());
       if(triangle[0]*triangle[0]+triangle[1]*triangle[1]==triangle[2]*triangle[2])
       cout<<"直角三角形"<<endl;
       else if(triangle[0]*triangle[0]+triangle[1]*triangle[1]>triangle[2]*triangle[2])
       cout<<"锐角三角形"<<endl;
       else cout<<"钝角三角形"<<endl;
    }
}

发表于 2024-02-17 13:21:37 回复(0)
#include <cmath>
#include <iostream>
using namespace std;

const double pi = 3.14159265358979;

//自定义类型名
using Side = double;    //边类型
using Angle = double;   //角类型

class Triangle {    //三角形
  private:
    Side a, b, c;   //三条边
    Angle A, B, C;  //三个内角(角度制)
  public:
    Triangle(double a, double b, double c); //构造函数
    void judge();   //判断三角形的类型
};

Triangle::Triangle(double a, double b, double c): a(a), b(b), c(c) {
    //余弦定理求角度
    A = acos((b * b + c * c - a * a) / (2 * b * c)) * 180 / pi;
    B = acos((a * a + c * c - b * b) / (2 * a * c)) * 180 / pi;
    C = acos((a * a + b * b - c * c) / (2 * a * b)) * 180 / pi;
}

void Triangle::judge() {    //判断三角形的类型并输出判断结果
    cout << (A > 90 || B > 90 || C > 90 ? "钝角三角形" :
             A == 90 || B == 90 || C == 90 ? "直角三角形" : "锐角三角形")
         << endl;
}

int main() {
    int a, b, c;
    while (cin >> a >> b >> c) {
        Triangle(a, b, c).judge();
    }
    return 0;
}

发表于 2024-02-02 11:23:15 回复(0)
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
    int a[3];//保存三条边
    while (cin >> a[0] >> a[1] >> a[2]) {
        sort(a,a+3);//找出最大的边、两条最小边,这里偷懒用sort了
        int shorts=a[0]*a[0]+a[1]*a[1],longs=a[2]*a[2];
        if(shorts>longs){
            cout<<"锐角三角形"<<endl;
        }
        if(shorts==longs){
            cout<<"直角三角形"<<endl;
        }
        if(shorts<longs){
            cout<<"钝角三角形"<<endl;
        }
    }
    return 0;
}

发表于 2023-03-24 10:58:55 回复(0)
#include <stdio.h>

int main() {
    int a[3];
    scanf("%d%d%d", &a[0], &a[1], &a[2]);
    for(int i = 0; i < 2; i ++){
        for(int j = 1; j < 3; j ++){
            if(a[j]<a[i]){
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    if(a[0]*a[0]+a[1]*a[1] == a[2]*a[2]){
        printf("直角三角形");
    } else if(a[0]*a[0]+a[1]*a[1] < a[2]*a[2]){
        printf("钝角三角形");
    } else {
        printf("锐角三角形");
    }
    return 0;
}

发表于 2023-03-12 15:31:54 回复(0)
# include <iostream>

using namespace std;

 int max(int x,int y,int z);
 int min(int x,int y,int z);

int main()
{
    int a,b,c;
    while(cin>>a>>b>>c)
    {
        if(a*a+b*b==c*c||a*a+c*c==b*b||c*c+b*b==a*a)
        {
            cout<<"直角三角形"<<endl;
        }
        if((a+b+c-max(a,b,c)-min(a,b,c))*(a+b+c-max(a,b,c)-min(a,b,c))+min(a,b,c)*min(a,b,c)>max(a,b,c)*max(a,b,c))
        {
            cout<<"锐角三角形"<<endl; 
        }
        if((a+b+c-max(a,b,c)-min(a,b,c))*(a+b+c-max(a,b,c)-min(a,b,c))+min(a,b,c)*min(a,b,c)<max(a,b,c)*max(a,b,c))
        {
            cout<<"钝角三角形"<<endl; 
        }
    }
    return 0;
 } 
 
 int max(int x,int y,int z)
 {
     int temp;
     if(x>=y)
     {
         temp=x;
     }
     else
     {
         temp=y;
     }
     if(temp>=z)
     {
         return temp;
     }
     else
     {
         return z;
     }
     
 }
 
  int min(int x,int y,int z)
 {
     int temp;
     if(x<=y)
     {
         temp=x;
     }
     else
     {
         temp=y;
     }
     if(temp<=z)
     {
         return temp;
     }
     else
     {
         return z;
     }
     
 }
发表于 2022-02-17 15:38:10 回复(0)
#include<stdio.h>

int main(){
	int a,b,c;
	while(scanf("%d %d %d",&a,&b,&c)!=EOF){
		if(a>=b && a>=c){
			if(b*b+c*c==a*a)
				printf("直角三角形");
			else if(b*b+c*c<a*a)
				printf("钝角三角形");
			else
				printf("锐角三角形");
		}
		else if(b>=a && b>=c){
			if(a*a+c*c==b*b)
				printf("直角三角形");
			else if(a*a+c*c<b*b)
				printf("钝角三角形");
			else
				printf("锐角三角形");
		}
		else if(c>=a && c>=b){
			if(a*a+b*b==c*c)
				printf("直角三角形");
			else if(a*a+b*b<c*c)
				printf("钝角三角形");
			else
				printf("锐角三角形");
		}
		printf("\n");
	}
}

发表于 2022-01-28 19:52:03 回复(0)
本题的解题思路就是如何判断锐角三角形和钝角三角形,利用余弦定理来判断三角形类型

#include<stdio.h>
#include<math.h>

int main()
{
    int a,b,c;
    
    while(scanf("%d%d%d",&a,&b,&c)!=EOF)
    {
        if(a+b<c||a+c<b||c+b<a)
            printf("不是三角形\n");
        if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(c*c+b*b==a*a))
            printf("直角三角形\n");
        if((a*a+b*b-c*c<0)||(c*c+b*b-a*a<0)||(a*a+c*c-b*b<0))
            printf("钝角三角形\n");
        if((a*a+b*b-c*c>0)&&(c*c+b*b-a*a>0)&&(a*a+c*c-b*b>0))
            printf("锐角三角形\n");
    }
    
    return 0;
}

发表于 2021-02-19 17:40:35 回复(0)
#include<stdio.h>
int main()
{
	int a[3],i,j,temp;
	while(scanf("%d %d %d",&a[0],&a[1],&a[2])!=EOF)
	{
		for(j=0;j<3;j++)
			for(i=0;i<3-j-1;i++)
			{
				if(a[i]>=a[i+1])
				{
					temp=a[i];
					a[i]=a[i+1];
					a[i+1]=temp;
				}
			}
		if(a[0]*a[0]+a[1]*a[1]==a[2]*a[2])
		printf("直角三角形");
		else if(a[0]*a[0]+a[1]*a[1]>a[2]*a[2])
		printf("锐角三角形");
		else if(a[0]*a[0]+a[1]*a[1]<a[2]*a[2])
		printf("钝角三角形"); 
	}
	return 0;
 } 

勾股定理扩展应用
发表于 2020-05-20 15:32:18 回复(0)
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
    int a1,b1,c1;
    while(scanf("%d %d %d",&a1,&b1,&c1)!=EOF){
        if(a1>b1)
            swap(a1,b1);
        if(b1>c1)
            swap(b1,c1);
        if(a1*a1+b1*b1>c1*c1)
            printf("锐角三角形\n");
        else if(a1*a1+b1*b1==c1*c1)
            printf("直角三角形\n");
        else
            printf("钝角三角形\n");
    }
    return 0;
}

编辑于 2020-05-05 16:25:14 回复(0)
#include<iostream>
(720)#include<algorithm>
#include<cstdio>
using namespace std;
int main()
{
    int a,b,c,i;
    while(scanf("%d%d%d",&a,&b,&c)!=EOF)
    {
        int t[3];
        t[0]=a,t[1]=b,t[2]=c;
        sort(t,t+3);
        int sum=t[0]*t[0]+t[1]*t[1]-t[2]*t[2];
        if(sum==0)
            cout<<"直角三角形"<<endl;
        else if(sum>0)
            cout<<"锐角三角形"<<endl;
        else
            cout<<"钝角三角形"<<endl;
        
    }
    return 0;
}

发表于 2020-04-23 21:49:30 回复(0)

问题信息

难度:
56条回答 11816浏览

热门推荐

通过挑战的用户

查看代码
判断三角形类型