蓝桥杯模拟测试

编程入门 行业动态 更新时间:2024-10-17 10:33:03

蓝桥杯模拟<a href=https://www.elefans.com/category/jswz/34/1771117.html style=测试"/>

蓝桥杯模拟测试

这次比赛给我的感觉怪怪的,总感觉这个题不正经(希望别被老师看到),所以打比赛的时候也没有特别紧张的感觉,总感觉全是一些找规律的题,然后就在那磨啊磨,功夫不负有心人,C题WA了61次终于A了/滑稽(一遍遍的试答案)

A - 结果填空:阶乘位数
蒜头君对阶乘产生了兴趣,他列出了前 10

个正整数的阶乘以及对应位数的表:
n
n!
位数
1 1 1
2 2 1
3 6 1
4 24 2
5 120 3
6 720 3
7 5040 4
8 40320 5
9 362880 6
10 3628800 7

对于蒜头君来说,再往后就很难计算了。他试图寻找阶乘位数的规律,但是失败了。现在请你帮他计算出第一个正整数的阶乘位数大于等于 10000
的数是多少,即求最小的正整数 n 满足 n! 的位数大于等于 10000。

一道填空题,直接输出答案就好了,一道典型的大数问题。
解决方法:设答案为n,需要求n!>=10^10000,两边同时取log10的对数,然后就变成了log10(1 * 2 * 3*…n)>=10000,然后利用数学法则
log10(a
b)=log10(a)+log10(b),所以上面那个式子的左边就可以变成log10(1)+log10(2)+…log10(n),这样跑一个循环就行了

正确代码:

#include <bits/stdc++.h>using namespace std;int main()
{int i,j;double sum;for(i=1;; i++){sum=0;for(j=1; j<=i; j++)sum+=log10(j);if(sum>=10000){printf("%d\n",i);//答案是3249break;}}return 0;
}

B - 结果填空:炮台实验

蒜头君在玩一个战争模拟游戏,他有高度为 1,2,3,…,n 的炮台各一个,他需要把这 n

个炮台从左往右排成一行,并且炮口都朝向右边。

在这个游戏中,所有炮台发射的炮弹会摧毁前方所有高度比自己低的炮台。每当蒜头君把 n
个炮台排成一行后,可能会有一些炮台被摧毁。举个例子:当前有 5 个炮台,从左到右高度分别为 2,1,3,5,4,往右发射炮弹后,高度为 4 的炮台被高度为 5 的摧毁,高度为 1 的炮台被高度为 2 的炮台摧毁,最后只会剩下 2,3,5

这三个炮台。

现在蒜头君想知道,如果随机地摆放这 n
个炮台,最后剩下炮台个数的期望是多少?比如 n=2 时,有两种摆放方式,高度序列分别为 1,2 和 2,1,前者最后剩下 2 个炮台,后者最后剩下一个炮台,因此期望为 (2+1)/2=1.5000。
请你求出 n=2019
时剩下炮台个数的期望,保留四位小数。

找规律,列出n为1-4的结果然后找规律就一目了然了。
规律为:1/1+1/2+1/3+…1/2019
正确代码:

#include <bits/stdc++.h>using namespace std;int main()
{int i;double sum=0;for(i=1; i<=2019; i++)sum+=1.0*1/i;printf("%.4f\n",sum);return 0;
}

J - 程序设计:轻重搭配
n 个同学去动物园参观,原本每人都需要买一张门票,但售票处推出了一个优惠活动,一个体重为 x 的人可以和体重至少为 2x 配对,这样两人只需买一张票。现在给出了 n个人的体重,请你计算他们最少需要买几张门票?

输入格式
第一行一个整数 n,表示人数。
第二行 n个整数,每个整数 ai表示每个人的体重。

输出格式
一个整数,表示最少需要购买的门票数目。
数据范围:
对于 30%的数据:1≤n≤25,1≤ai≤100。
对于 60%的数据:1≤n≤10000,1≤ai≤1000。
对于 100%的数据:1≤n≤5⋅105,1≤ai≤105。

样例解释
1和 9 配对,7 和 3 配对,剩下 5,5 单独,一共买四张票。

Sample Input

6
1 9 7 3 5 5

Sample Output

 4

思路:先排序然后贪心,从中间靠左的那个位置开始贪,与最末尾的数进行比较,如果符合题意,则两个数都左移,如果不符合题意,则左边的那个数左移,右边的数不能浪费。

正确代码:

#include <bits/stdc++.h>using namespace std;int main()
{int n,i,j,a[500010],sum=0;scanf("%d",&n);for(i=0; i<n; i++)scanf("%d",&a[i]);sort(a,a+n);for(i=n/2-1,j=n-1; i>=0&&j>n/2-1;){if(a[i]*2<=a[j]){i--;j--;sum++;}elsei--;}sum+=n-2*sum;printf("%d\n",sum);return 0;
}

还有其他的一些题(也就是我说的C题)由于我是一个个答案试的,所以这里就不贴代码了,另外还得补一下剩下的题,留个坑吧,以后再填。

更多推荐

蓝桥杯模拟测试

本文发布于:2024-02-06 15:49:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1749887.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:测试   蓝桥杯

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!