天梯初级练习题目 7-41 ~ 7-50 含全部测试点

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;
}

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值