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