牛客网NC276055:三根木棒能否组成三角形问题详解(ACM中的A题)
牛客网NC276055:三根木棒能否组成三角形问题详解(ACM中的A题)
📌 题目描述
📊 输入输出格式
输入描述:
- 输入三个正整数 a a a, b b b, c c c 表示三根木棒的长度
- 取值范围: 1 ≤ a , b , c ≤ 2 × 1 0 9 1 \leq a, b, c \leq 2 \times 10^9 1≤a,b,c≤2×109
输出描述:
- 如果有可能组成三角形,输出 “Yes”
- 否则输出 “No”
🧮 解题思路
要判断三根木棒能否组成三角形,我们需要应用三角形的基本性质:任意两边之和大于第三边。
我们需要分别尝试将三根木棒中的每一根长度翻倍,判断修改后的三根木棒是否能够满足三角形的构成条件:
- 将第一根木棒长度翻倍,判断 ( 2 a , b , c ) (2a, b, c) (2a,b,c) 是否能组成三角形
- 将第二根木棒长度翻倍,判断 ( a , 2 b , c ) (a, 2b, c) (a,2b,c) 是否能组成三角形
- 将第三根木棒长度翻倍,判断 ( a , b , 2 c ) (a, b, 2c) (a,b,2c) 是否能组成三角形
只要有一种方案能够构成三角形,答案就是 “Yes”,否则为 “No”。
💻 代码实现
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){int a,b,c;cin>>a>>b>>c;int d,e,f;d=a*2,e=b*2,f=c*2;if(d+b>c&&b+c>d&&d+c>b||e+a>c&&e+c>a&&a+c>e||f+a>b&&f+b>a&&a+b>f){cout<<"Yes";return 0;}else cout<<"No";return 0;
}
📝 代码解析
- 首先定义变量
a
,b
,c
存储三根木棒的原始长度 - 然后定义变量
d
,e
,f
分别表示三根木棒翻倍后的长度:d = a*2
表示第一根木棒翻倍e = b*2
表示第二根木棒翻倍f = c*2
表示第三根木棒翻倍
- 使用条件判断语句检查三种情况下是否能组成三角形:
- 第一种情况:(
d
,b
,c
) 能否组成三角形,需满足d+b>c && b+c>d && d+c>b
- 第二种情况:(
a
,e
,c
) 能否组成三角形,需满足e+a>c && e+c>a && a+c>e
- 第三种情况:(
a
,b
,f
) 能否组成三角形,需满足f+a>b && f+b>a && a+b>f
- 第一种情况:(
- 如果任一情况满足条件,输出 “Yes”;否则输出 “No”
🌟 示例分析
示例1: a=1, b=2, c=3
- 将第一根木棒翻倍后:(2, 2, 3)
- 2+2>3 ✓
- 2+3>2 ✓
- 2+3>2 ✓
- 满足三角形条件,输出 “Yes”
示例4: a=1, b=1, c=3
- 将第一根木棒翻倍后:(2, 1, 3)
- 2+1>3 ✗ (不满足)
- 将第二根木棒翻倍后:(1, 2, 3)
- 1+2>3 ✗ (不满足)
- 将第三根木棒翻倍后:(1, 1, 6)
- 1+1>6 ✗ (不满足)
- 都不满足三角形条件,输出 “No”
💡 总结
本题的关键是理解三角形的构成条件,并尝试对每根木棒进行翻倍操作,判断是否有可能满足三角形条件。通过枚举所有可能的情况,我们可以得到正确答案。