今天事非常多,所有事情都凑在一起忙的不可开交。早上社团本来要搞活动,又刚好凑上实训课,三四节来不及搬东西过去,只能下课后再过去帮忙,手机没电,还是要忙到接近12点半才来得及回宿舍吃外卖。
饭还没吃几口,比赛就马上要开始了,只能放下手中的外卖打开电脑。我们学校的蓝桥杯校内赛定在今天13:00-17:00举行。时长和蓝桥杯正赛一样,都是4个小时。
本次试题的难度,说实话比今年三月去参加的正赛,要粗糙。怎么说呢,就是简单的题目特别简单,困难的题目特别难,但胜在所有题目都能暴解。现在比赛也比完了,就分享一下今天做题的一些感想和对题目的一些分析吧。虽然感觉会做的题真的不多。。。
题目:
1.
不超过19000的正整数中,与19000互质的数的个数是多少?
- 解析:
互质的题以前真的接触的很少,印象中这是第二次遇到互质的题目,但做起来也不算慌张,因为也算有点经验了,辗转相除应该是最好的暴解了吧。。。虽然我还是把这题写了个函数。
代码挺长的,大多都是废话,主要是函数的写法,辗转相除,做题比较多的人应该再熟悉不过了。
#include
int Gcd(int m,int n)
{
int o;
while(n>0)
{
o=m%n;
m=n;
n=o; }
return m;
}
int main()
{
int a,i,b,s;
while(scanf("%d",&a)!=EOF)
{
if(a==1)
{
printf("1\n");
}
else{
s=0;
for(i=1;i
{
b=Gcd(i,a);
if(b==1)
{
s++;
}
}
printf("%d\n",s);
}
}
return 0;
}
2.
在计算机存储中,12.5MB是多少字节?
- 解析:
这题怎么说呢。。。感觉有点凑数,应该属于签到题中的签到题吧?蓝桥杯需不需要考计算机二级的知识咱也不知道咱也不敢问。。。
直接12.5×1024×1024 计算器完成,不写代码了
答案应该是13 107 200
3.
在一个8x8的国际象棋棋盘的左上角放一枚棋子,每一步只允许棋子向右或向下移动一格,不允许移出棋盘,14步后可移动到棋盘的右下角。
请问本质不同的移动方案有多少种?
两个移动方案称为本质不同的,是指这两种方案中至少存在某一步,一种方案中是向右走,一种方案中是向下走。
- 解析
说实话这题挺恶心的。。。因为太久没刷题了,对dfs,bfs这类题是真的不熟悉了,今天也是找以前的代码出来改了小半天,最后还是弄了个死循环。过程图大概如下:
image.png
最后放弃了,手动笔算了个18交了上去。。。
4.
一棵10层的二叉树,最多包含多少个结点?
注意当一棵二叉树只有一个结点时为一层。
- 解析:
二叉树问题和C语言关系还是挺密切的。。。虽然这题的问题同样问的有点弱智。。。可能唯一要注意的点就是不要粗心直接把第十层的结点数上传了吧。。。题目要求的是全部的结点
答案应该是1023
5.问题描述
给定一个单词,请使用凯撒密码将这个单词加密。
凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变为d,b变为e,...,w变为z,x变为a,y变为b,z变为c。
例如,lanqiao会变成odqtldr。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出一行,表示加密后的密文。
- 解析:
同样属于签到题,ASCLL码类的问题。至于应该要加多少减多少得到答案,自己在纸上写一遍就清楚了。
代码:
#include
int main()
{
char ch;
while(scanf("%c",&ch)!=EOF){
if(ch >= 'a' && ch <= 'w'){
ch += 3;
}
if(ch >= 'x' && ch <= 'z')
ch -=23;
printf("%c", ch);
}
return 0;
}
6.问题描述
在数列 a[1], a[2], ..., a[n] 中,如果对于下标 i, j, k 满足 0
给定一个数列,请问数列中有多少个元素可能是递增三元组的中心。
输入格式
输入的第一行包含一个整数 n。
第二行包含 n 个整数 a[1], a[2], ..., a[n],相邻的整数间用空格分隔,表示给定的数列。
输出格式
输出一行包含一个整数,表示答案。
- 解析:
这题。。。怎么说呢,浪费了我差不多一个半小时。而且最后得到的答案依然不尽人意。
其实这题一眼看上去就有种dp的感觉。。。但我没学过dp只能是硬着头皮暴解:
我的想法是,如果一个数是中心的话,那么前后肯定会有数比他大和比他小,那么只要符合这种情况就让一个数得到1判断正确,最后同时符合有数比他大和比他小的情况就让答案+1。
所以我最终的代码如下:
#include
using namespace std;
int main()
{
int n;
int a[10000];
int s;
int o=0,p=0;
int x=0;
scanf("%d",&n);
for(int i=0;i
scanf("%d",&a[i]);
}
for(int j=0;j
s=a[j];
while(j>=1){
j--;
if(s>a[j]){
o=1;
break;
}
}
j=0;
while(j<=n-1){
j++;
if(s