7-41 输出三角形面积和周长 分数 15
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
输入格式:
输入为3个正整数,分别代表三角形的3条边a、b、c。
输出格式:
如果输入的边能构成一个三角形,则在一行内,按照
area = 面积; perimeter = 周长
的格式输出,保留两位小数。否则,输出
These sides do not correspond to a valid triangle
输入样例1:
5 5 3
输出样例1:
area = 7.15; perimeter = 13.00
输入样例2:
1 4 1
输出样例2:
These sides do not correspond to a valid triangle
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
#include <cmath>
using namespace std;
int a, b, c;
int main()
{
cin >> a >> b >> c;
int mx = a > b ? a > c ? a : c : b > c ? b : c;
int mn = a < b ? a < c ? a : c : b > c ? b : c;
int r = a + b + c - mx - mn;
if(r + mn <= mx)
{
puts("These sides do not correspond to a valid triangle");
return 0;
}
double s = (double)(a + b + c) / 2;
printf("area = %.2lf; perimeter = %.2lf\n", sqrt(s * (s - a) * (s - b) * (s - c)), (double)a + b + c);
return 0;
}
7-42 计算油费 分数 15
现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。
本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。
输入格式:
输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。
输出格式:
在一行中输出应付款额,保留小数点后2位。
输入样例:
40 97 m
输出样例:
301.34
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
#include <map>
using namespace std;
map<int, double> mp {{90, 6.95}, {97, 7.93}, {93, 7.44}};
int a, b;
double r = 0.95;
char op;
int main()
{
cin >> a >> b >> op;
if(op == 'e') r = 0.97;
printf("%.2lf\n", a * mp[b] * r);
return 0;
}
7-43 输出闰年 分数 15
输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入格式:
输入在一行中给出21世纪的某个截止年份。
输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
输入样例1:
2048
输出样例1:
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
输入样例2:
2000
输出样例2:
Invalid year!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
using namespace std;
int n;
bool check(int p)
{
return p % 4 == 0 && p % 100 != 0 || p % 400 == 0;
}
int main()
{
cin >> n;
if(n <= 2000 || n > 2100)
{
puts("Invalid year!");
return 0;
}
bool flag = true;
for(int i = 2001; i <= n; ++ i)
if(check(i)) printf("%d\n", i), flag = false;
if(flag) puts("None");
return 0;
}
7-44 高速公路超速处罚 分数 15
按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。
输入格式:
输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。
输出格式:
在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。
输入样例1:
65 60
输出样例1:
OK
输入样例2:
110 100
输出样例2:
Exceed 10%. Ticket 200
输入样例3:
200 120
输出样例3:
Exceed 67%. License Revoked
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
using namespace std;
int a, b;
int main()
{
cin >> a >> b;
if(a >= 1.5 * b) printf("Exceed %.lf%%. License Revoked", 100.0 * (a - b) / b);
else if(a >= 1.1 * b) printf("Exceed %.lf%%. Ticket 200", 100.0 * (a - b) / b);
else puts("OK");
return 0;
}
7-45 统计学生成绩 分数 15
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
- 大于等于90分为A;
- 小于90且大于等于80为B;
- 小于80且大于等于70为C;
- 小于70且大于等于60为D;
- 小于60为E。
输入格式:
输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。
输出格式:
在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。
输入样例:
7
77 54 92 73 60 65 69
输出样例:
1 0 2 3 1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
using namespace std;
int n;
int a, b, c, d, e;
int main()
{
cin >> n;
for(int i = 1; i <= n; ++ i)
{
int temp; cin >> temp;
if(temp >= 90) a ++;
else if(temp >= 80) b ++;
else if(temp >= 70) c ++;
else if(temp >= 60) d ++;
else e ++;
}
printf("%d %d %d %d %d\n", a, b, c, d, e);
return 0;
}
7-46 求奇数和 分数 15
本题要求计算给定的一系列正整数中奇数的和。
输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。
输出格式:
在一行中输出正整数序列中奇数的和。
输入样例:
8 7 4 3 70 5 6 101 -1
输出样例:
116
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
using namespace std;
int ans;
int main()
{
int e;
while(scanf("%d", &e), e > 0)
if(e % 2) ans += e;
cout << ans << endl;
return 0;
}
7-47 求给定精度的简单交错序列部分和 分数 15
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。
输入格式:
输入在一行中给出一个正实数eps。
输出格式:
在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
输入样例1:
4E-2
输出样例1:
sum = 0.854457
输入样例2:
0.02
输出样例2:
sum = 0.826310
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
using namespace std;
double e, ans, temp = 0x3f3f3f3f;
int main()
{
cin >> e;
for(int i = 1, j = 1; temp > e; i += 3, ++ j)
temp = 1.0 / i, ans += (j % 2 ? 1 : -1) * temp;
printf("sum = %.6lf\n", ans);
return 0;
}
7-48 求整数的位数及各位数字之和 分数 15
对于给定的正整数N,求它的位数及其各位数字之和。
输入格式:
输入在一行中给出一个不超过109的正整数N。
输出格式:
在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。
输入样例:
321
输出样例:
3 6
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
using namespace std;
int n;
int ans, c;
int main()
{
cin >> n;
for(int i = 1; n / i; ++ c, i *= 10);
do ans += n % 10; while(n /= 10);
cout << c << " " << ans << endl;
return 0;
}
7-49 最大公约数和最小公倍数 分数 15
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
鸣谢安阳师范学院段晓云老师和软件工程五班李富龙同学补充测试数据!
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
using namespace std;
typedef long long LL;
LL a, b;
LL gcd(int a, int b)
{
return b ? gcd(b, a % b) : a;
}
LL lcm(int a, int b)
{
return a / gcd(a, b) * b;
}
int main()
{
cin >> a >> b;
cout << gcd(a, b) << " " << lcm(a, b) << endl;
return 0;
}
7-50 找出最小值 分数 20
本题要求编写程序,找出给定一系列整数中的最小值。
输入格式:
输入在一行中首先给出一个正整数n,之后是n个整数,其间以空格分隔。
输出格式:
在一行中按照“min = 最小值”的格式输出n个整数中的最小值。
输入样例:
4 -2 -123 100 0
输出样例:
min = -123
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> st;
int e, n;
// 排序即可
int main()
{
cin >> n;
for(int i = 0; cin >> e, i < n; ++ i) st.push_back(e);
sort(st.begin(), st.end());
cout << "min = " << st.front() << endl;
return 0;
}