1408191710-hd-Just A Triangle.cpp

本篇博客介绍了一个简单的程序设计问题,即根据三条边长判断三角形类型:直角、等腰还是普通三角形。提供了完整的代码实现,并解释了判断逻辑。

Just A Triangle

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2120 Accepted Submission(s): 1404


 

Problem Description

  This is an easy problem, just for you to warm up.
  Give you three edges of a triangle. Can you tell me which kind of triangle it stands for?
If it’s a right triangle(直角三角形), please output “good”. If it’s a isosceles triangle(等腰三角形), please output “perfect”. Otherwise, please output “just a triangle”. You may suppose the input is legal.

 


 

Input

The first line contains an integer t means the number of test cases.
The each case contains three integers a, b, c in a line which stands for the length of the three edges.
(0 <a, b, c < 300).

 


 

Output

For each case, output the answer in one line.

 


 

Sample Input

43 4 52 2 3 1 4 44 6 3

 


 

Sample Output

goodperfectperfectjust a triangle

 


 

 

题目大意

      给你三个数,如果可以组成直角三角形,就输出good,如果可以组成等腰三角形,就输出perfect,如果不符合这两种情况就输出just a triangle。

 

额外收获

       1、判断是否可以组成三角形:

            两边之和大于第三边&&两边之差小于第三边

       2、warm up     热身

 

代码

<span style="font-size:18px;">#include<stdio.h>
#include<algorithm>
using namespace std;
int s[5];
int main()
{
	int n;
	int a,b,c;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d%d%d",&s[0],&s[1],&s[2]);
		sort(s,s+3);
		if(s[0]+s[1]>s[2]&&s[2]-s[1]<s[0])
		{
			if(s[0]*s[0]+s[1]*s[1]==s[2]*s[2])
			    printf("good\n");
			else if(s[0]==s[1]||s[0]==s[2]||s[1]==s[2])
			    printf("perfect\n");
			else
			    printf("just a triangle\n");
		}
	}
	return 0;
}</span>


 

### 条件组合覆盖测试用例的设计 条件组合覆盖是一种逻辑覆盖标准,要求设计足够的测试用例,使得每个判定中的每个条件的所有可能取值至少出现一次,并且每个判定本身的所有可能结果也至少出现一次。对于 `Triangle` 类的 `isTriangle` 方法,需要考虑以下条件: 1. 边长是否满足三角形成立的基本条件:任意两边之和大于第三边。 2. 边长是否在有效范围内(如引用中提到的 1 到 100 的范围[^2])。 3. 不同类型的三角形分类(等边、等腰、一般三角形或非三角形)。 以下是为 `Triangle` 类生成满足条件组合覆盖的测试用例的方法: #### 测试用例设计 根据上述条件,可以将测试用例分为以下几个类别: 1. **非三角形**: - 条件:任意两边之和小于等于第三边。 - 示例测试用例: ```java Triangle t1 = new Triangle(1, 2, 3); // a + b <= c Triangle t2 = new Triangle(5, 1, 6); // a + c <= b Triangle t3 = new Triangle(7, 8, 15); // b + c <= a ``` 2. **等边三角形**: - 条件:三条边相等。 - 示例测试用例: ```java Triangle t4 = new Triangle(5, 5, 5); Triangle t5 = new Triangle(10, 10, 10); ``` 3. **等腰三角形**: - 条件:两条边相等,且满足三角形基本条件。 - 示例测试用例: ```java Triangle t6 = new Triangle(5, 5, 8); Triangle t7 = new Triangle(7, 9, 7); ``` 4. **一般三角形**: - 条件:三条边均不相等,但满足三角形基本条件。 - 示例测试用例: ```java Triangle t8 = new Triangle(3, 4, 5); Triangle t9 = new Triangle(6, 7, 8); ``` 5. **边界条件**: - 条件:边长处于有效范围的边界值。 - 示例测试用例: ```java Triangle t10 = new Triangle(1, 1, 1); // 最小值 Triangle t11 = new Triangle(100, 100, 100); // 最大值 Triangle t12 = new Triangle(1, 100, 100); // 混合边界值 ``` 6. **无效输入**: - 条件:边长超出有效范围。 - 示例测试用例: ```java Triangle t13 = new Triangle(0, 5, 5); // 小于最小值 Triangle t14 = new Triangle(101, 101, 101); // 大于最大值 ``` #### 测试用例代码示例 以下是基于上述测试用例的代码实现: ```java public class Triangle { private int a, b, c; public Triangle(int a, int b, int c) { this.a = a; this.b = b; this.c = c; } public String isTriangle() { if (a <= 0 || b <= 0 || c <= 0 || a > 100 || b > 100 || c > 100) { return "Invalid Input"; } if (a + b <= c || a + c <= b || b + c <= a) { return "Not a Triangle"; } if (a == b && b == c) { return "Equilateral Triangle"; } if (a == b || b == c || a == c) { return "Isosceles Triangle"; } return "Scalene Triangle"; } public static void main(String[] args) { Triangle[] testCases = { new Triangle(1, 2, 3), // Non-Triangle new Triangle(5, 1, 6), // Non-Triangle new Triangle(7, 8, 15), // Non-Triangle new Triangle(5, 5, 5), // Equilateral Triangle new Triangle(10, 10, 10), // Equilateral Triangle new Triangle(5, 5, 8), // Isosceles Triangle new Triangle(7, 9, 7), // Isosceles Triangle new Triangle(3, 4, 5), // Scalene Triangle new Triangle(6, 7, 8), // Scalene Triangle new Triangle(1, 1, 1), // Boundary - Valid Triangle new Triangle(100, 100, 100), // Boundary - Valid Triangle new Triangle(1, 100, 100), // Boundary - Valid Triangle new Triangle(0, 5, 5), // Invalid Input new Triangle(101, 101, 101) // Invalid Input }; for (Triangle testCase : testCases) { System.out.println("Triangle(" + testCase.a + ", " + testCase.b + ", " + testCase.c + ") -> " + testCase.isTriangle()); } } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值