蓝桥杯c语言试题校赛,蓝桥杯C语言C组校内赛题目解析

今天事非常多,所有事情都凑在一起忙的不可开交。早上社团本来要搞活动,又刚好凑上实训课,三四节来不及搬东西过去,只能下课后再过去帮忙,手机没电,还是要忙到接近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这类题是真的不熟悉了,今天也是找以前的代码出来改了小半天,最后还是弄了个死循环。过程图大概如下:

89d99b234442?utm_campaign=haruki&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值