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

7-51 统计素数并求和 分数 20

本题要求统计给定整数M和N区间内素数的个数并对它们求和。

输入格式:

输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:

在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:

10 31

输出样例:

7 143

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
#include <cmath>
using namespace std;
int a, b;
int ans, cnt;

bool check(int n)
{
    if(n <= 1) return false;
    for(int i = 2; i <= sqrt(n); ++ i)
        if(n % i == 0) return false;
    return true;
}

int main()
{
    cin >> a >> b;
    for(int i = a; i <= b; ++ i)
        if(check(i)) ans += i, cnt ++;
    cout << cnt << " " << ans << endl;
    return 0;
}

7-52 特殊a串数列求和 分数 20

给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。

输入格式:

输入在一行中给出不超过9的正整数a和n。

输出格式:

在一行中按照“s = 对应的和”的格式输出。

输入样例:

2 3

输出样例:

s = 246

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
using namespace std;
int a, n;
int ans;

int main()
{
    cin >> a >> n;
    for(int i = 1, t = 0; i <= n; ++ i)
        t = t * 10 + a, ans += t;
    cout << "s = " << ans << endl;
    return 0;
}

7-53 猜数字游戏 分数 15

猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。如果猜到,则结束程序。程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。如果在到达N次之前,用户输入了一个负数,也输出“Game Over”,并结束程序。

输入格式:

输入第一行中给出两个不超过100的正整数,分别是游戏机产生的随机数、以及猜测的最大次数N。最后每行给出一个用户的输入,直到出现负数为止。

输出格式:

在一行中输出每次猜测相应的结果,直到输出猜对的结果或“Game Over”则结束。

输入样例:

58 4
70
50
56
58
60
-2

输出样例:

Too big
Too small
Too small
Good Guess!

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
using namespace std;
int a, n;
int cnt;

int main()
{
    cin >> a >> n;
    bool flag = true;
    for(int i = 1; i <= n; ++ i)
    {
        int temp; cin >> temp;
        if(temp < 0) break;
        else if(temp > a) puts("Too big");
        else if(temp < a) puts("Too small");
        else
        {
            if(i == 1)  puts("Bingo!");
            else if(i <= 3) puts("Lucky You!");
            else puts("Good Guess!");
            flag = false;
            break;
        }
    }
    if(flag) puts("Game Over");
    return 0;
}

7-54 兔子繁衍问题 分数 15

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

输入格式:

输入在一行中给出一个不超过10000的正整数N。

输出格式:

在一行中输出兔子总数达到N最少需要的月数。

输入样例:

30

输出样例:

9

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
using namespace std;
const int N = 10010;
int st[N];
int n, cnt;

int main()
{
	cin >> n;
	st[1] = st[2] = 1;
    if(n <= 1) 
    {
        cout << 1 << endl;
        return 0;
    }
    
    // 斐波那契数
	for (cnt = 2; cnt <= n; ++ cnt)
	{
		st[cnt] = st[cnt - 1] + st[cnt - 2];
		if (st[cnt] >= n) break;
	}
	cout << cnt << endl;
	return 0;
}

7-55 高空坠球 分数 20

皮球从某给定高度自由落下,触地后反弹到原高度的一半,再落下,再反弹,……,如此反复。问皮球在第n次落地时,在空中一共经过多少距离?第n次反弹的高度是多少?

输入格式:

输入在一行中给出两个非负整数,分别是皮球的初始高度和n,均在长整型范围内。

输出格式:

在一行中顺序输出皮球第n次落地时在空中经过的距离、以及第n次反弹的高度,其间以一个空格分隔,保留一位小数。题目保证计算结果不超过双精度范围。

注意:n为 0 时表示球未开始下落。

输入样例:

33 5

输出样例:

94.9 1.0

鸣谢中山职业技术学院邱维阳老师完善题面。

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
using namespace std;
typedef long long LL;
LL h, n;
double ans, tot;

int main()
{
    cin >> h >> n;
    if(n <= 0)
    {
        printf("%.1lf %.1lf\n", 0, 0);
        return 0;
    }
    tot = h, ans = -h;
    for(int i = 1; i <= n; ++ i)
    {
        ans += 2 * tot;
        tot /= 2;
    }
    printf("%.1lf %.1lf\n", ans, tot);
    return 0;
}

7-56 求分数序列前N项和 分数 15

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:

20

输出样例:

32.66

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
using namespace std;
int n;
double ans, uA = 2.0, dA = 1.0;

int main()
{
    cin >> n;
    for(int i = 1; i <= n; ++ i)
    {
        ans += uA / dA;
        double temp = uA;
        uA = uA + dA;
        dA = temp;
    }
    printf("%.2lf\n", ans);
    return 0;
}

7-57 求e的近似值 分数 15

自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。

输入格式:

输入第一行中给出非负整数 n(≤1000)。

输出格式:

在一行中输出部分和的值,保留小数点后八位。

输入样例:

10

输出样例:

2.71828180

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
using namespace std;
const int N = 1010;
int st[N];
int n;
double ans, dd = 1.0;

int main()
{
    cin >> n;
    for(int i = 1; i <= n + 1; ++ i, dd *= i)
        ans += (double)i / dd;
    printf("%.8lf\n", ans);
    return 0;
}

7-58 换硬币 分数 20

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

输入格式:

输入在一行中给出待换的零钱数额x∈(8,100)。

输出格式:

要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

输入样例:

13

输出样例:

fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
using namespace std;
int n;
int cnt, tot;

int st[] = {5, 2, 1};
int main()
{
    cin >> n;
    for(int i = n / 5; i >= 1; -- i)
    {
        for(int j = (n - 5 * i) / 2; j >= 1; -- j)
            for(int k = n - 5 * i - 2 * j; k >= 1; -- k)
                if(5 * i + 2 * j + k == n)
                printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n", i, j, k, i + j + k), cnt ++;
    }
    cout << "count = " << cnt << endl;
    return 0;
}

7-59 输出三角形字符阵列 分数 15

本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。

输入格式:

输入在一行中给出一个正整数n(1≤n<7)。

输出格式:

输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。

输入样例:

4

输出样例:

A B C D 
E F G 
H I 
J 

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
using namespace std;
int n, cnt;

int main()
{
    cin >> n;
    char op = 'A';
    for(int i = n; i >= 1; -- i)
    {
        for(int j = 1; j <= i; ++ j)
            printf("%c ", op + cnt ++);
        putchar('\n');
    }
    return 0;
}

7-60 求幂级数展开的部分和 分数 20

已知函数ex可以展开为幂级数1+x+x2/2!+x3/3!+⋯+xk/k!+⋯。现给定一个实数x,要求利用此幂级数部分和求ex的近似值,求和一直继续到最后一项的绝对值小于0.00001。

输入格式:

输入在一行中给出一个实数x∈[0,5]。

输出格式:

在一行中输出满足条件的幂级数部分和,保留小数点后四位。

输入样例:

1.2

输出样例:

3.3201

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

#include <iostream>
using namespace std;
const double e = 0.00001;
double x, tot = 1.0, dd = 1.0;
double ans = 1.0;

int main()
{
    cin >> x;
    for(int i = 1; tot >= e; ++ i)
        tot *= x / i, ans += tot;
    printf("%.4lf\n", ans);
    return 0;
}

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值