第十三届蓝桥杯省赛(2022年4月17日)C++中级组题解

目录

前言

一、选择题

1.题目描述

2.参考答案

二、编程题

1.比较大小

题目描述

题目解析

AC代码

2.分成整数

题目描述

题目解析

AC代码1(模拟)

AC代码2(dfs)

3.组合

题目描述

题目解析

AC代码1(数论)

AC代码2(Sylvester定理)

4.最大值

题目描述

题目解析

AC代码1(模拟)

AC代码2(二分查找)

5.农作物

题目描述

题目解析

AC代码

6.面积

题目描述

题目解析

AC代码1

AC代码2

前言

        就在前两天,我参与了第十三届蓝桥杯省赛(2022年4月17日)C++中级组,考题挺难,但发挥较好。这是一篇相关的题解,题是我在考试时电脑截屏下来的。

一、选择题

1.题目描述

1.二进制数1101111转换为十六进制是(   ) 

A、157       B、111    C、6f        D、3f

2.下列指针的用法中,不正确的一项是(   ) 

A、int i; int *p=&i;  

B、int i; int *p; i=*p;     

C、int *p; p=0;     

D、int i=5; int *p; p=&i; 

3.以下对main()函数描述正确的一项是(   )  

A、main()函数必须写在所有函数的前面                       

B、main()函数必须写在所有函数的后面                                   

C、main()函数可以写在任何位置,但不能放到其它函数的里面                           

D、main()函数必须固定位置

4.下列函数中不能重载的一项是(   ) 

A、构造函数      B、析构函数      C、成员函数      D、非成员函数

5.定义char a; float b; double c; 执行语句 c=a+b+c 后c的变量类型是(  )。 

A、char         B、float     C、double    D、int

2.参考答案

CBCBC

(1) 四位截断, (110)2=(6)16 , (1111)2=(f)16 ,

(2) *p是一个空地址, 无法引用, B选项错误; C选项属于危险语法, 因为地址0是一个未知地址

(3) main()函数可以写在其它函数后面或前面(声明即可), 其它函数也可以调用main()函数,

main()函数显然无法“放到”其它函数里面, 任何函数都做不到, 文字游戏, 有点无聊。

(4) 析构函数只有一个,无法构成重载。

(5) 已经定义了c是double, 任何运算都不会改变数据的类型, 类型覆盖只会影响运算的结果。

顺便说下类型覆盖, 浮点型>整型>字符型, 布尔型与字符型运算后结果为整型。

二、编程题

1.比较大小

题目描述

        给定两个正整数N和M (0<N<200, 0<M<200, N≠M), 比较两个正整数的大小,然后将较大的一个正整数输出。例如:N=145, M=100, 比较后145大于100, 故输出145.

        样例输入:

        145 100

        样例输出:

        145

题目解析

        很简单,这里用到了max函数,注意用algorithm头文件。

AC代码

#include<iostream>//调用输入输出流头文件
#include<algorithm>//调用算法头文件
using namespace std;//使用标准名字空间
int main(){//主函数开始
	int m,n;//定义整数类型变量m,n
	cin>>m>>n;//输入m,n的值
	cout<<max(m,n);//输出m,n的最大值
    return 0;//主函数结束,返回0
}

2.分成整数

题目描述

        给定一个正整数N,然后将N分解成3个正整数之和,计算出共有多少种符合要求的分解方法.要求:

        1) 分解的3个正整数各不相同;

        2) 分解的三个正整数中都不含数字3和7.

        如:N为8, 可分解为(1,1,6), (1,2,5), (1,3,4), (2,2,4), (2,3,3),

        其中满足要求的分解方法有1种,为(1,2,5) .

        输入描述:

        输入一个正整数N(5<N<501), 表示要分解的正整数

        输出描述:

        输出一个整数,表示共有多少种符合要求的分解方法.

        样例输入:

        8

        样例输出:

        1

题目解析

        把这个题看成两部分:1.将输入的正整数拆分成三个不相同的正整数的和;2.判断这三个整数是否含有数字3或7。

        第一部分可通过枚举实现将三个数设为i,j,n-i-j,保证依次增大,则枚举i即可完成枚举。第二部分可通过子函数来判断。

        同时,也可以用深度搜索Dfs解决问题。

AC代码1(模拟)

#include<iostream>//调用输入输出流头文件
using namespace std;//使用标准名字空间
bool n37(int n){//子函数,用来判断参数是否含有数字3或7 
	while(n){
		if(n%10==3 or n%10==7) return 1;//如果个位为3或7,返回1 
		n/=10;
  • 24
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 23
    评论
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值