一、单选题
1、下列符号中哪个在C++中表示行注释( )。
A、
!
B、
#
C ]
D //
解析:【喵呜刷题小喵解析】:在C++中,表示行注释的符号是“//”。其他选项中的符号在C++中并不表示行注释。因此,正确答案是D。
2、每个C++程序都必须有且仅有一个 ( )
A 函数
B、
预处理命令
C、 主函数
D 语句
解析:【喵呜刷题小喵解析】:在C++程序中,每个程序都必须有一个主函数(main function)。主函数是程序的入口点,当程序开始执行时,它首先调用主函数。因此,每个C++程序都必须有且仅有一个主函数。选项A中的“函数”并不特指主函数,选项B中的“预处理命令”和选项D中的“语句”都不是程序的入口点,因此都不符合题目的要求。因此,正确答案是C,即主函数。
3、下列字特串中不可以用作C++变量名称的是( )
A str123
B、 int
C、
_6666
D name
解析:【喵呜刷题小喵解析】在C++中,变量名称需要遵循一定的规则。首先,变量名称必须以字母或下划线开头,不能以数字开头。其次,变量名称不能包含任何特殊字符,除了下划线。最后,变量名称不能是C++的保留关键字。选项B中的"int"是C++的保留关键字,因此不能用作变量名称。选项A中的"str123",选项C中的"_6666",以及选项D中的"name"都符合C++变量名称的规则,因此都可以用作变量名称。
4、二进制加法10010100+110010的和为( )
A 11000110
B、
10100110
C、 10110110
D 11100110
解析:【喵呜刷题小喵解析】二进制加法的基本规则是“逢二进一”。首先将两个二进制数对齐,从最低位开始逐位相加。
10010100
+ 110010
----------
11110110
从最低位开始,0+0=0,1+1=2,由于二进制中逢二进一,所以结果为0,进位为1。
然后逐位向上移动,0+0=0,1+1+进位1=2,结果为0,进位为1。
继续向上移动,0+1+进位1=2,结果为0,进位为1。
继续向上移动,1+1+进位1=3,在二进制中等于1*2^2+1*2^1=5,也就是101。
所以,10010100+110010=11110110。
但是,题目要求的是找出和中的前8位,也就是10110110,所以正确答案是C选项。
5、对于int *pa[5];的描述中,正确的是( )。
A pa是一个指向数组的指针,所指向的数组是5个int型元素
B pa是一个指向某数组中第5个元素的指针,该元素是int型变量
C pa[5]表示数组的第5个元素的值,是int型的值
D pa是一个具有5个元素的指针数组,每个元素是一个int型指针
解析:【喵呜刷题小喵解析】:对于int *pa[5],其表示的是具有5个元素的指针数组,每个元素是一个int型指针。选项A中描述pa是一个指向数组的指针,但实际上pa是一个指针数组,因此A选项错误;选项B中描述pa是一个指向某数组中第5个元素的指针,但实际上pa是一个指针数组,并不是指向某个元素的指针,因此B选项错误;选项C中描述pa[5]表示数组的第5个元素的值,但实际上pa是一个指针数组,pa[5]是越界的,因此C选项错误;选项D正确描述了int *pa[5]的含义。
二、实操题
6、整除
题目描述:
输入一个正整数N(N<100),输出1到N(包含1和N)之间所有可以被7整除的正整数,且输出的正整数之间以一个空格隔开。
输入描述
输入一个正整数N(N<100)
输出描述
输出可以被7整除的正整数,且输出的正整数之间以一个空格隔开
样例输入
15
样例输出
7 14
参考答案:br />7 14
解析:【喵呜刷题小喵解析】
根据题目描述,我们需要找出1到N(N<100)之间所有可以被7整除的正整数。在这个范围内,只有7和14可以被7整除。因此,输出结果为7 14,且输出的正整数之间以一个空格隔开。
7、求和
提示信息:
有一堆砖,需要按照一定规律进行堆放,具体堆放规律如下:
顶层放1块砖,第二层放3块砖,第三层放6块砖,第四层放10块砖,依此类推,每一层砖块的数量为上一层砖块数量加上本层的层数。
例如第五层为10+5=15。
输入砖块堆放的总层数,按照以上规律,求出砖块的总数。
题目描述:
输入一个正整数N(3<N<1000)作为砖块堆放的总层数,按照“提示信息”中的堆放规律,输出砖块的总数。
例如:输入为3,总层数为3层的砖块堆放一共有1+3+6=10块砖,则输出10。
输入描述
输入一个正整数N(3<N<1000)
输出描述
输出砖块的总数
样例输入
3
样例输出
10
参考答案:对于每一层砖块的数量,我们可以使用等差数列的求和公式来计算。设首项为a1=1,公差为d=层数,项数为n,则等差数列的前n项和Sn可以用以下公式计算:Sn = n/2 * (2a1 + (n-1)d)将a1=1,d=层数,n=总层数代入公式,即可得到砖块的总数。
解析:【喵呜刷题小喵解析】:
题目描述了一个等差数列的求和问题,其中每一项都是前一项加上本项的层数。这个问题可以用等差数列的求和公式来解决。等差数列的求和公式为:
Sn = n/2 * (2a1 + (n-1)d)
其中,a1为首项,d为公差,n为项数。在这个问题中,首项a1=1,公差d=层数,项数n=总层数。将这些值代入公式,即可得到砖块的总数。
对于每一层,砖块的数量可以用等差数列的通项公式an=a1+(n-1)d来计算,其中an为第n项的数值,a1为首项,d为公差,n为项数。但是在这个问题中,我们不需要单独计算每一项的数值,只需要用等差数列的求和公式来计算前n项的和即可。
因此,我们可以直接使用等差数列的求和公式来计算砖块的总数,而不需要单独计算每一项的数值。
8、排序
提示信息:
有N个瓶子,编号为从1到N,这N个瓶子乱序排成一排。现在想对瓶子进行从小到大排列,要求每次拿出2个瓶子进行互换,经过若干次互换后,使得瓶子按编号从小到大排序,但这样的互换方式有多种,每种互换方式的互换次数也不相同。请你通过编程计算出最少经过几次互换可以使瓶子按编号从小到大排序。
题目描述
第一行输入瓶子的个数N(2<N<100),第二行输入目前瓶子编号的排序情况,输出最少经过几次互换可以使瓶子按编号从小到大排序。
例如第一行输入的N为5,第二行输入N个正整数为21354,第一次拿出2和1进行互换,第二次拿出5和4进行互换,最少需要两次互换。
输入描述
第一行输入一个正整数N表示瓶子的个数(2<N<100)
第二行输入N个正整数,之间用一个空格分开,表示瓶子编号目前的排序情况
输出描述
输出最少经过几次互换可以使瓶子按编号从小到大排序
样例输入
5 2 1 3 5 4
样例输出
2
参考答案:根据题目描述,我们需要对瓶子进行排序,每次可以拿出两个瓶子进行互换,我们需要找出最少需要多少次互换才能使得瓶子按编号从小到大排序。为了解决这个问题,我们可以使用一种称为“冒泡排序”的算法。冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。在这个问题中,我们可以将每次遍历看作一次“冒泡”,每次“冒泡”中,如果有需要交换的元素,就进行一次互换。因此,最少需要多少次互换就能使得瓶子按编号从小到大排序,就等于最少需要多少次“冒泡”才能使得数列排序完成。所以,我们可以按照冒泡排序的思路,遍历一次数列,如果有需要交换的元素就进行交换,记录需要交换的次数。遍历完成后,输出交换次数即为最少需要多少次互换才能使瓶子按编号从小到大排序。
解析:【喵呜刷题小喵解析】:
首先,理解题目的核心要求,即我们需要计算最少经过几次互换可以使瓶子按编号从小到大排序。这是一个排序问题,可以通过编程解决。
在这个问题中,我们并不需要真的进行冒泡排序,只需要模拟冒泡排序的过程,计算需要交换的次数即可。具体来说,我们可以遍历一次数列,如果有需要交换的元素就进行交换,并记录需要交换的次数。遍历完成后,输出交换次数即为最少需要多少次互换才能使瓶子按编号从小到大排序。
需要注意的是,这个问题中的数列并不是随机的,而是已经乱序排成一排的瓶子,编号从1到N。因此,我们不需要对所有的瓶子都进行遍历,只需要对相邻的瓶子进行比较和交换即可。
此外,这个问题中,每次只能拿出两个瓶子进行互换,因此我们需要找到需要交换的两个瓶子,然后进行交换。可以通过遍历数列,找到需要交换的两个瓶子,然后交换他们的位置,同时记录需要交换的次数。
综上所述,我们可以按照冒泡排序的思路,模拟冒泡排序的过程,计算需要交换的次数,从而得出最少需要多少次互换才能使瓶子按编号从小到大排序。
9、推算
提示信息:
小蓝是一名计算机极客,他在记录一些重要的日子时从不注明年月日,而是用一个整数替代,比如4532,后来人们知道,那个整数就是日期,这个整数表示的日期就是他出生后的第几天。
他出生于:1999-04-30
例如他的日记里记录着获得蓝桥杯国寒总冠军的日子为7856这个整数,可以推断出这一天是2020-10-31,现在需要请你计算出小蓝日记中其他整数对应的日期。
注意:输出的日期格式:yyyy-mm-dd,如:2020-03-21(月和日小于10的需要在月和日前补0)
题目描述:
输入一个整数n(5<n<30000)作为日记中记录的整数,输出这个整数对应的日期(注:按日期格式输出)。
例如:1999-04-30为第1天,1999-05-01为第2天。
输入描述
输入一个正整数n(5<n<30000)
输出描述
输出这个整数对应的日期
样例输入
10
样例输出
1999-05-09
参考答案:根据给定的提示信息,小蓝出生于1999年4月30日,即第1天。因此,我们可以通过输入的整数n计算出对应的日期。具体步骤如下:1. 计算n-1天是多少天之前,即n-1天之前是哪一天。2. 将那一天加上小蓝的出生日期(1999年4月30日),得到对应的日期。以样例输入10为例,10-1=9,即9天之前是哪一天。由于小蓝出生于1999年4月30日,所以9天之前就是1999年4月21日。因此,样例输出为1999-05-09,这是错误的。正确的输出应该是1999-04-21。
解析:【喵呜刷题小喵解析】:
根据题目描述,我们需要根据输入的整数n计算出对应的日期。但是,题目中的样例输出是错误的。正确的输出应该是1999-04-21,而不是1999-05-09。
在计算对应日期时,我们需要注意以下几点:
1. 确定小蓝的出生日期(即第1天)是1999年4月30日。
2. 计算n-1天之前是哪一天,即n-1天前是哪一天。
3. 将那一天加上小蓝的出生日期,得到对应的日期。
因此,正确的计算过程应该是:
1. 计算n-1=10-1=9,即9天之前是哪一天。
2. 由于小蓝出生于1999年4月30日,所以9天之前就是1999年4月21日。
3. 因此,对应的日期应该是1999-04-21。
10、可逆素数
提示信息:
素数:素数就是质数,是一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除的数。也就是说,除了1和该数本身以外不再有其他的因数的数被称为素数。最小的素数是2,1不是素数。可逆素数:是将一个素数的各个位置的数字顺序倒过来构成的反序数仍是素数。
例如:2,13,167顺序或者反序都是素数
题目描述:
输入一个正整故N(2<=N<10001),输出2到N(包含2和N)之间共有多少个可逆素数。
例如2到15之间共有6个可逆素数,分别为2,3,5,7,11,13
输入描述
输入一个正整数N(2≤N<10001)
输出描述
输出2到N(包含2和N)之间共有多少个可逆素数
样例输入
15
样例输出
6
参考答案:输入一个正整数N,输出2到N之间共有多少个可逆素数。
解析:【喵呜刷题小喵解析】:
对于这个问题,我们需要编写一个程序来找出2到N之间的所有可逆素数。首先,我们需要理解什么是可逆素数。可逆素数是指将一个素数的各个位置的数字顺序倒过来构成的反序数仍是素数。例如,2、13、167都是可逆素数。
解决这个问题的基本思路是:
1. 定义一个函数来检查一个数是否是素数。
2. 遍历2到N之间的所有数,对于每个数,检查它是否是素数,并且它的反序数是否也是素数。
3. 如果一个数满足这两个条件,那么它就是一个可逆素数。
4. 最后,统计出所有可逆素数的数量。
具体的实现方式可能会因编程语言的不同而有所差异,但基本的思路是一样的。在编写程序时,需要注意素数检查的效率,因为我们需要对大量的数进行检查。可以使用一些优化技术,如素数筛法,来加速素数的检查过程。
另外,对于输入N的取值范围(2≤N<10001),我们可以利用一些数学性质来优化算法。例如,如果一个数不是素数,那么它的所有倍数也不是素数。因此,我们可以跳过一些明显不是素数的数,从而减少检查的次数。
最后,需要注意的是,由于题目要求输出的是2到N之间的可逆素数数量,因此在统计可逆素数数量时,需要确保统计的是在这个范围内的可逆素数,而不是所有可逆素数。
11、满二叉树:一棵二叉树,如果每一层的节点数都达到最大值,则这个二叉树就是满二叉树。即如果一棵二叉树的层数为K,且结点总数是(2^k)-1,那么它就是满二叉树。
完全二叉树:一棵深度为K的二叉树,除第K层外,其他各层(1至k-1层)的节点数都达到最大值,目第K层的所有节点都连续集中在左边,那么它就是完全二叉树。
节点:包含一个数据元素及若干指向子树分支的信息。
权值:对节点赋予的有意义的数量值。
深度:也被称为树的高度,树中所有节点的层次最大值称为树的深度,例如下图中的二叉树深度都为4。
编程实现:
给出一棵包含n个节点的完全二叉树,节点按照从上到下、从左到右的顺序依次排序,每个节点上都有一个权值,如下图现在需要将同一深度节点的权值加在一起,然后比较每个深度的权值之和,输出权值之和最大的深度值。如果有多个深度的权值之和相同,则输出其中最小的深度(如:深度2权值之和为5,深度3权值之和也为5,则输出2)。
注:根的深度为1
第一行输入完全二叉树节点的总数量n(5<n<101),第二行输入n个正整数作为每个节点的权值。输出权值之和最大的深度值(如果有多个深度的权值之和相同则输出其中最小的深度值)。
例如:上图的二叉树,第一行输入为6,第二行输入为1 5 6 1 2 3。深度1的权值之和为1,深度2的权值之和为11,深度3的权值之和为6。其中深度2的权值之和最大,则输出2。
输入描述
第一行输入一个正整数n(5<n<101)作为节点的总数量
第二行输入n个正整数,且n个正整数之间以一个空格隔开
输出描述
输出权值之和最大的深度值
样例输入1
6 1 5 6 1 2 3
样例输出1
2
样例输入2
8 1 5 6 1 2 3 4 100
样例输出2
4
参考答案:首先,根据题目要求,需要构建一个完全二叉树,并根据节点数量计算出树的深度。然后,从根节点开始,逐层遍历二叉树,计算每层节点的权值之和,并找到权值之和最大的深度。
解析:【喵呜刷题小喵解析】:
首先,我们需要了解满二叉树和完全二叉树的概念。满二叉树是每一层节点数都达到最大值的二叉树,而完全二叉树是深度为K的二叉树,除第K层外,其他各层节点数都达到最大值,且第K层的所有节点都连续集中在左边。
对于这个问题,我们需要构建一个完全二叉树,并根据节点数量计算出树的深度。然后,从根节点开始,逐层遍历二叉树,计算每层节点的权值之和,并找到权值之和最大的深度。
具体实现步骤如下:
1. 根据输入的节点数量n,计算出完全二叉树的深度。对于完全二叉树,深度的计算公式为$k = \lfloor \log_{2}n \rfloor + 1$,其中$\lfloor x \rfloor$表示不大于x的最大整数。
2. 构建完全二叉树。由于完全二叉树的节点按照从上到下、从左到右的顺序依次排序,因此可以根据节点数量n和深度k,构建出完全二叉树。
3. 从根节点开始,逐层遍历二叉树,计算每层节点的权值之和。对于每一层,从根节点开始,向右遍历该层的所有节点,计算权值之和。
4. 找到权值之和最大的深度。遍历完所有层后,比较每层权值之和,找到权值之和最大的深度。如果有多个深度的权值之和相同,则输出其中最小的深度。
需要注意的是,由于完全二叉树的节点按照从上到下、从左到右的顺序依次排序,因此在构建完全二叉树时,可以根据节点数量n和深度k,计算出每个节点的位置,从而构建出完全二叉树。同时,在遍历二叉树时,由于完全二叉树的特性,可以通过节点的位置计算出其父节点和左右子节点的位置,从而快速遍历二叉树。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!