竞码编程-蓝桥杯模拟赛3(大学生组&青少年组)--2020.2.29

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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值