A. 试题A:生存还是毁灭,这是一个问题 7’
创建一个数组a [ 26 ],用来保存每个字母的个数, 可以每次读入一个字符串,然后统计所有的字符并存入a数组中,也可以每次读入一个字符来统计。
#include <iostream>
#include <string>
using namespace std;
string s;
int a[26];
int main() {
freopen("test.in", "r", stdin);
freopen("test.out", "w", stdout);
while(cin >> s) {
for(int i = 0; i < s.size(); i++) {
if('a' <= s[i] && s[i] <= 'z') {
a[s[i] - 'a']++;
} else if ('A' <= s[i] && s[i] <= 'Z') {
a[s[i] - 'A']++;
} else {
continue;
}
}
}
int ans = 0;
for(int i = 0; i < 26; i++) {
ans = max(ans, a[i]);
}
cout << ans << endl;
return 0;
}
答案为141.
B. 试题B:小小神枪手 开局98K 8'
期望expectation = 赢得概率 * 打枪的次数
我们设4个变量,
Failure:前几次失败用到的概率,
rate:每次射击的命中率。
num:打枪次数
expectation:期望 :(前几次失败的概率 * 每次射击的命中率 * 打枪次数)。’
#include <iostream>
using namespace std;
int main() {
double rate = 0.75;
int num = 1;
double expectation = 0.0;
double Failure = 1.0; //每一次失败的概率
cout << "Failure" << "\t\t" << "rate" << "\t\t" << "num" << "\t" << "expectation" << endl;
while(rate >= 0.5) {
expectation += Failure * rate * num;
printf("%.6f\t%.6f\t%d\t%.6f\n", Failure, rate, num, expectation);
Failure = Failure * (1 - rate);
rate = rate * 0.9;
num++;
}
printf("\n%.6f\n", expectation);
return 0;
}
答案是:1.305323
C. 试题C:关云长单刀会金莲,贾宝玉三打白骨精 10’
31天的时间,由于看4本书的时间连续,所以,把每本书看的时间当做一天,则把4天,3天,5天,3天看作4天,4+16 = 20天,则表示从20天中选取4天。并且4天排列表示,则为A(20, 4) = 20*19*18*17.
#include <iostream>
using namespace std;
int main() {
cout << 20 * 19 * 18 * 17 << endl;
return 0;
}
D. 试题D:抽刀断水水更流,举杯销愁愁更愁 10’
DFS,把和sum以及step存起来。
#include <iostream>
using namespace std;
int p[22] = {3,5,7,11,13,19,23,29,31,37,41,53,59,61,67,71,97,101,127,197,211,431};
bool vis[22];
bool sumVis[1695]; // true表示质数的和被访问过
void dfs(int i, int sum, int step) {
if(step > 12) {
return;
}
sumVis[sum] = true;
for(int j = i + 1; j < 22; j++) {
dfs(j, sum + p[j], step + 1);
}
}
int main() {
sumVis[0] = true;
for(int i = 0; i < 22; i++) {
sumVis[p[i]] = true;
dfs(i, p[i], 1);
}
int cnt = 0;
for(int i = 0; i < 1695; i++) {
if(!sumVis[i]) {
cnt++;
}
}
cout << cnt <<endl;
return 0;
}
E. 试题E:左手作圆右手方,世人机敏便可尔 15'
扇形面积:夹角 * 半径。(alpha为夹角,半径为2)
剩余2个三角形面积:底 * 高 / 2。
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double pi = 3.14159265358979;
int main() {
double alpha = acos(0.75);
double ans = 4 * ( (pi / 2 - 2.0 * alpha) * 2 + 2 * (0.5 * 1.5 * sqrt(1.75)) );
printf("%.2f\n", ans);
return 0;
}