T1 三角形的分类
题目描述
给定三个角度 a,b 及 c。请判断这三个角在平面上能组成什么样的三角形:
如果不能组成三角形,输出 Error
如果能组成等边三角形,输出 Equilateral
如果能组成等腰直角三角形,输出 Isosceles right
如果能组成等腰三角形,输出 Isosceles
如果能组成直角三角形,输出 Right
如果能组成不等边三角形,输出 Scalene
输入格式
第一行:第一个角的角度 a
第二行:第二个角的角度 b
第三行:第三个角的角度 c
输出格式
根据题目要求输出对应的文字
数据范围
1≤a,b,c≤180
样例数据
输入:
60
60
60
输出:
Equilateral
分析
这题虽然直接可以用if语句套嵌,但这题给你的描述正好是把三角形的所有可能性从小到大给你了,否则还要考虑会不会出现如:把等腰直角三角形输成等腰或直角三角形的情况。
代码
#include <bits/stdc++.h>
using namespace std;
int a, b, c;
int main(){
cin >> a >> b >> c;
if (a < b) swap(a, b);
if (b < c) swap(b, c);
if (a < b) swap(a, b);
//将abc从大到小排序,方便判断
if (a + b + c != 180) printf("Error");
else if (a == 60 && b == 60 && c == 60)
printf("Equilateral");
else if (a == 90 && b == c)
printf("Isosceles right");
else if (a == b || a == c || b == c)
printf("Isosceles");
else if (a == 90)
printf("Right");
else
printf("Scalene");
return 0;
}
T2 区间最大公约数
题目描述
给定两个正整数L,R,你可以任意选择两个正整数x,y且满足L≤x<y≤R,并求出x,y的最大公约数。请问在所有选法中,x,y最大公约数的最大值为多少?
输入格式
输入共一行,两个正整数表示L,R
输出格式
输出共一个整数,表示所求答案
数据范围
对于30%的数据,1≤L<R≤100
对于60%的数据,1≤L<R≤ 1 0 3 10^3 103
对于100%的数据,1≤L<R≤ 5 × 1 0 5 5×10^5 5×105
样例数据
输入:
23 29
输出:
4
说明:
选(24,28)时,取到最大值为 4
输入:
32768 32769
输出:
1
分析
已知,对于两个数 a × c 和 a × ( c − 1 ) a\times c和a \times (c-1) a×c和a×(c−1),其中a一定是他们两个数的公因数,所以如果 a × c 和 a × ( c − 1 ) a\times c和a \times (c-1) a×c和a×(c−1)在l~r之间,那么a就是其中的公因数,那么我们就可以枚举所有可能解了
代码
#include <bits/stdc++.h>
using namespace std;
int l, r, ans = 1;
int main(){
cin >> l >> r;
for (int i = 2; i <= r; i++){
int x = r / i * i;
if (x - i >= l) ans = i;
}
cout << ans << endl;
return 0;
}
T3 滑雪训练
题目描述
小爱最近迷上了滑雪,某滑雪场有 n n n 条不同难度的雪道,只有学习并滑了第 i i i 条雪道,才能去参加第 i + 1 i+1 i+1 条雪道的学习与训练。
已知,第一次滑第 i i i 条雪道时,需要先进行 a i a_i ai分钟的学习,再花 b i b_i bi分钟滑该雪道一次,才算学习完成。若之后再滑第 i i i 条雪道,则仅需 b i b_i b