cccc678 发表于 2022-11-20 20:31:32

求解!!三角形分类文体

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

## 题目描述

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

- 如果三条线段不能组成一个三角形,输出`Not triangle`;
- 如果是直角三角形,输出`Right triangle`;
- 如果是锐角三角形,输出`Acute triangle`;
- 如果是钝角三角形,输出`Obtuse triangle`;
- 如果是等腰三角形,输出`Isosceles triangle`;
- 如果是等边三角形,输出`Equilateral triangle`。{:5_90:} {:5_107:}

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

## 输入格式

输入 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>

int main(int agrc,const char*agrv[])
{
        int a,b,c;
        scanf("%d%d%d",&a,&b,&c);
        if(a+b<=c){
                printf("Not triangle");
        }
        if(a*a+b*b==c*c){
                printf("Right triangle");
        }
                if(a*a+b*b>c*c){
                        printf("Acute triangle");
                }
                if(a*a+b*b<c*c){
                        printf("Obtuse triangle");
                }
                if(a==b!=c||a==c!=b||a!=c==b){
                        printf("Isosceles triangle");
                }
                if(a==b==c){
                        printf("Equilateral triangle");
                }
                printf("\n");
                return 0;
}

jackz007 发表于 2022-11-20 21:37:50

#include <stdio.h>

int main(void)
{
      int pa , pb , pc , a , b , c , p , q                                       ;
      scanf("%d%d%d", & pa , & pb , & pc)                                        ;
      a = (pa < pb && pa < pc) ? pa : (pb < pa && pb < pc) ? pb : pc             ;
      c = (pa > pb && pa > pc) ? pa : (pb > pa && pb > pc) ? pb : pc             ;
      b = (pa > a && pa < c) ? pa : (pb > a && pb < c) ? pb : pc               ;
      if(a + b > c && a + c > b && b + c > a) {
                p = c * c                                                          ;
                q = a * a + b * b                                                ;
                if(p == q)      printf("Right triangle\n")                         ;
                else if (p < q) printf("Acute triangle\n")                         ;
                else            printf("Obtuse triangle\n")                        ;
                if(a == b || b == c || a == c) printf("Isosceles triangle\n")      ;
                if(a == b && a == c && b == c) printf("Equilateral triangle\n")    ;
      } else {
                printf("Not triangle\n")                                           ;
      }
}
      编译运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
3 3 3
Acute triangle
Isosceles triangle
Equilateral triangle

D:\\C>x
3 4 5
Right triangle

D:\\C>x
6 10 6
Obtuse triangle
Isosceles triangle

D:\\C>x
1 14 5
Not triangle

D:\\C>

howzyao 发表于 2022-11-21 00:39:09

这题出的好,赞!

明天试试

tommyyu 发表于 2022-11-21 07:46:13

#include <stdio.h>

int main() ///////
{
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    //少了排序
    int a1, b1, c1;
        a1 = a<=b && a<=c ? a :
                (b<=a && b<=c) ? b : c;
        b1 = (a>=b && b>=c) || (a<=b && b<=c) ? b :
               (b>=a && a>=c) || (b<=a && a<=c) ? a : c;
        c1 = (a != a1 && a != b1) ? a :
               (b != a1 && b != b1) ? b : c;
        a = a1; b = b1; c = c1;
    if(a+b<=c){
      printf("Not triangle\n");//换行
      return 0; //不是三角形就可以直接结束了
    }
    if(a*a+b*b==c*c){
      printf("Right triangle\n");//换行
    }
    if(a*a+b*b>c*c){
      printf("Acute triangle\n");//换行
    }
    if(a*a+b*b<c*c){
      printf("Obtuse triangle\n");//换行
    }
    if(a==b && b!=c|| a==c && c!=b || a!=c && c==b){ //条件不对
      printf("Isosceles triangle\n");//换行
    }
    if(a==b && b==c){
      printf("Equilateral triangle\n");//换行
    }
    return 0;
}

cccc678 发表于 2022-11-21 11:34:52

howzyao 发表于 2022-11-21 00:39
这题出的好,赞!

明天试试

行!

cccc678 发表于 2022-11-21 11:36:17

就是我运行起来有些对,有些错,反正就是不行

jhq999 发表于 2022-11-21 12:00:14

cccc678 发表于 2022-11-21 11:36
就是我运行起来有些对,有些错,反正就是不行

#include <stdio.h>
int main(int agrc,const char*agrv[])
{
      int a,b,c,t;
      scanf("%d%d%d",&a,&b,&c);
      if(a>b)t=a,a=b,b=t;/////
      if(b>c)t=b,b=c,c=t;///////
      if(a+b<=c){
                printf("Not triangle\n");
                return 0;////////
      }
      if(a*a+b*b==c*c){
                printf("Right triangle\n");
      }
                if(a*a+b*b>c*c){
                        printf("Acute triangle\n");
                }
                if(a*a+b*b<c*c){
                        printf("Obtuse triangle\n");
                }
                if(a==b||b==c||c==b){///////////
                        printf("Isosceles triangle\n");
                }
                if(a==b&&b==c){///////////
                        printf("Equilateral triangle\n");
                }
                printf("\n");
                return 0;
}
页: [1]
查看完整版本: 求解!!三角形分类文体