目录
前言
就在前两天,我参与了第十三届蓝桥杯省赛(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;