今天事非常多,所有事情都凑在一起忙的不可开交。早上社团原本要搞活动,又恰好凑上实训课,三四节来不及搬东西过去,只能下课后再过去帮忙,手机没电,还是要忙到接近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
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码类的问题。至于应该要加多少减多少得到答案,自己在纸上写一遍就清楚了。代码:#includeint 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。
所以我最终的代码如下:#includeusing 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=1){ j--; if(s>a[j]){ o=1; break; } } j=0; while(j<=n-1){ j++; if(s