一、单选题
1、执行 cout << '9'*3; 语句后,输出的结果是( )。
A 27
B 9*3
C 999
D 171
解析:【喵呜刷题小喵解析】在C++中,'9'是一个字符常量,其ASCII值为57。当执行'9' * 3运算时,实际上是将57乘以3,得到171,而不是字符串"999"。然而,cout语句中'9' * 3并没有被正确地输出,而是输出了171的十进制表示对应的字符,即'y'。因此,正确答案应该是27,这是'9'的ASCII值乘以3的结果(57 * 3 = 171,对应的十进制字符是'3',其ASCII值是51)。所以,选项A "27"是正确的。
请注意,这个解析是基于题目的原始描述,即cout语句试图输出'9' * 3的结果。然而,这个语句在C++中实际上是不合法的,因为它试图将字符常量与整数进行乘法运算,这是不允许的。正确的语句应该是cout << (int)('9' * 3);,这将输出27。原始题目可能存在误导性,因为它试图展示一个不合法的语句,并询问其输出,而不是一个合法的语句。
2、已定义: int a = 02023, b = 0x212; a + b 的值是( )。
A 八进制数4771
B 十进制数1573
C 十进制数2553
D 十六进制数9f9
解析:【喵呜刷题小喵解析】:
首先,我们需要将变量a和b的值转换为十进制。
变量a的值是02023,这是一个八进制数。在八进制中,每一位数字代表的数值是相应位数的8的幂次方。因此,02023转换为十进制是:
$02023_{(8)} = 2 \times 8^{3} + 0 \times 8^{2} + 2 \times 8^{1} + 3 \times 8^{0} = 1347_{(10)}$
变量b的值是0x212,这是一个十六进制数。在十六进制中,每一位数字代表的数值是相应位数的16的幂次方。因此,0x212转换为十进制是:
$0x212_{(16)} = 2 \times 16^{2} + 1 \times 16^{1} + 2 \times 16^{0} = 530_{(10)}$
然后,我们将这两个十进制数相加:
$1347_{(10)} + 530_{(10)} = 1877_{(10)}$
所以,a + b的值是十进制数1877,选项B正确。
3、执行以下代码,输出的结果是( )。
using namespace std;
int func(int x)
{
if (x <= 4)
return 2 * x - 1;
else if (x > 7)
return func(x - 4) + x;
else
return func(x + 3) + 2;
}
int main()
{
cout << func(10);
return 0;
}
A 26
B 29
C 38
D 45
解析:【喵呜刷题小喵解析】
首先,我们分析函数`func`的递归逻辑:
* 当x <= 4时,返回2x - 1。
* 当x > 7时,返回func(x - 4) + x。
* 否则,返回func(x + 3) + 2。
对于main函数中的func(10),我们可以按照以下步骤进行:
1. 10 > 7,所以执行else if语句,即func(10 - 4) + 10。
2. 6 <= 4,所以执行if语句,即2 * 6 - 1 = 11。
3. 将11加上10,得到21。
所以,func(10)的输出结果是21。
但是,题目中的选项与21不符,可能是题目或选项出错了。如果按照题目和选项来看,我们需要继续分析:
func(6)的执行过程如下:
1. 6 <= 4,所以执行if语句,即2 * 6 - 1 = 11。
所以,func(6)的输出结果是11。
接着,func(10)的表达式func(6) + 10变为11 + 10 = 21。
但是,题目中的输出结果是21,与选项不符。再次检查代码和选项,发现可能是选项出错了。
实际上,func(10)的输出结果应该是21,而不是选项中的任何一个。
如果题目和选项确实出错了,那么可能是原始答案或题目被篡改了。在这种情况下,我们需要找到正确的答案或重新检查题目和选项。
因此,本题目的正确答案应该与选项都不符,可能是原始答案或题目被篡改了。如果是原始答案或题目被篡改,那么需要找到正确的答案或重新检查题目和选项。
4、下列选项中,判断a不等于0且b不等于0的正确的条件表达式是( )。
A !(a==0 && b==0)
B !a=0 && !b=0
C a && b
D !((a!=0) && (b!=0))
解析:【喵呜刷题小喵解析】在逻辑运算中,条件表达式通常用于判断变量的值是否满足特定的条件。
选项A:`!(a==0 && b==0)`。这个表达式表示“a不等于0且b不等于0”的逻辑非。如果a和b都不等于0,那么`a==0 && b==0`这个表达式的结果为假(False),其逻辑非`!(a==0 && b==0)`的结果为真(True)。
选项B:`!a=0 && !b=0`。这个表达式存在语法错误,因为`!a=0`和`!b=0`都是赋值表达式,而不是逻辑表达式。在逻辑表达式中,`!=`用于表示“不等于”,而不是单个的`!`。
选项C:`a && b`。这个表达式表示“a和b都为真”。如果a和b都不等于0,那么它们都为真,`a && b`的结果为真。但是,这个表达式并没有明确表示“a不等于0且b不等于0”,因为当a或b为0时,整个表达式的结果也为假。
选项D:`!((a!=0) && (b!=0))`。这个表达式表示“a等于0或b等于0”的逻辑非。如果a或b等于0,那么`a!=0 && b!=0`的结果为假,其逻辑非`!((a!=0) && (b!=0))`的结果为真。这个表达式并不能正确表示“a不等于0且b不等于0”。
因此,正确答案是选项A。
5、执行语句 int a[3][4] = {{1, 2}, {3}, {4, 5, 6, 7}}; 后,a[1][2] 和a[2][1] 的值分别为:( )。
A 2、3
B 0、5
C 2、5
D 5、0
解析:【喵呜刷题小喵解析】在C语言中,二维数组可以按行或按列初始化。对于给定的二维数组int a[3][4],其初始化形式为{{1, 2}, {3}, {4, 5, 6, 7}}。根据C语言的规定,当提供的初始化器数量少于数组的元素时,剩余的元素将被自动初始化为0。
对于选项a[1][2],由于第二行的初始化器只有一个元素3,其余的元素默认初始化为0。因此,a[1][2]的值为0。
对于选项a[2][1],由于第三行的初始化器有四个元素,但只提供了前两个元素4和5,其余的元素默认初始化为0。因此,a[2][1]的值为5。
综上,a[1][2]的值为0,a[2][1]的值为5,所以正确答案是B。
二、实操题
6、促销活动
【题目描述】
某超市搞促销活动,活动内容:购物金额每满200元(含200元)就可以享受“满200减25”的优惠。已知小维的购物金额为N(1<N≤1000000),请计算出享受优惠后他需要支付多少元。例如:N=430 ,380 元(380=430-2×25)。
【输入格式】
输入一个正整数N(1<N≤1000000),表示购物金额(单位:元)
【输出格式】
输出一个正整数,表示享受优惠后需要支付的金额(单位:元)
【样例输入】
430
【样例输出】
380
参考答案:根据题目描述,当购物金额每满200元(含200元)就可以享受“满200减25”的优惠。因此,我们需要计算N中200的整数倍有多少个,然后计算需要减去的金额,最后得到享受优惠后需要支付的金额。具体步骤如下:1. 计算N中200的整数倍有多少个,设为k;2. 计算需要减去的金额,即25×k;3. 计算享受优惠后需要支付的金额,即N-25×k。
解析:【喵呜刷题小喵解析】:
这个题目主要考察我们对数学和逻辑的理解和应用能力。首先,我们需要理解题目中的优惠规则,即购物金额每满200元(含200元)就可以享受“满200减25”的优惠。然后,我们需要根据这个规则,计算出享受优惠后需要支付的金额。
具体来说,我们可以将购物金额N分解成若干个200的整数倍,每个200的整数倍都可以享受“满200减25”的优惠。因此,我们需要计算N中200的整数倍有多少个,然后计算需要减去的金额,最后得到享受优惠后需要支付的金额。
在编程实现时,我们可以使用循环或者除法运算来找出N中200的整数倍有多少个,然后计算需要减去的金额,最后得到享受优惠后需要支付的金额。
需要注意的是,当N小于200时,不需要享受优惠,直接输出N即可。
7、相邻身高差
时间限制:1000MS
内存限制: 65536KB
题目描述:
有N (4<N<100) 名同学站成一队,已知每名同学的身高 (单位: 厘米),请比较该队中任意相邻两名同学的身高差(取正值),并输出最大的身高差。
例如: N = 8,8名同学的身高分别是 151、120、144、182、160、158、147、161.相邻两名同学的身高差依次是31、24、38、22、2、11、14,其中最大身高差是 38.
输入描述
第一行输入一个正整数 N (4N<100),表示站队的同学人数
第二行输入N个正整数(80<正整数<220),表示队列中学生的身高(单位: 厘米),相邻两个正整数之间用一个空格隔开
输出描述
输出一个非负整数,表示相邻两名同学中最大身高差。
样例输入
8 151 120 144 182 160 158 147 161
样例输出
38
参考答案:```#include
解析:【喵呜刷题小喵解析】:
首先,我们定义了一个整型变量N,用于存储站队同学的人数。然后,我们定义了一个整型向量heights,用于存储队列中学生的身高。
接着,我们通过循环读取输入,将每名同学的身高存储到向量heights中。
然后,我们定义了一个整型变量max_diff,用于存储相邻两名同学中最大的身高差。我们通过一个循环,计算相邻两名同学的身高差,并更新max_diff的值。
最后,我们输出max_diff的值,即为相邻两名同学中最大的身高差。
在算法的实现过程中,我们使用了C++标准库中的vector和algorithm,分别用于存储数据和计算最大值。其中,vector是一种动态数组,可以随着元素的增加而自动调整大小;algorithm中的max函数可以用于比较两个数的大小,并返回较大的那个数。
8、九进制回文数
提示信息
回文数: 反向排列与原来一样的数就叫做回文数
例如,12321 是回文数,1231 不是回文数。
九进制数: 指逢9进位的一种进位计数制,以0、1、2、3、4、5、6、7、8共九个数码表示。例如: 十进制数 9等于九进制数 10,十进制数 81 等于九进制数 100,以此类推.
时间限制:1000MS
内存限制:65536KB
题目描述:
给定两个正整数N和M (1SNsMs5000),请计算出N到M之间 (含N和M) 总共有多少个数满足以下条件:
1、转换为九进制之后为回文数:
2、转换为九进制后每个数位上的数字都是奇数
例如:
当N=90,M=120,90到 120之间(含90和120) 总共有2 个数满定条件,为91 和109;
91 转换为九进制为 111,是一个回文数,且每个数位上的数字都是奇数;
109 转换为九进制为 131,是一个回文数,且每个数位上的数字都是奇数;
故输出2。
输入描述:
输入两个正整数N 和 M (1<N<M<5000),两个正整数之间用一个空格隔开
输出描述
输出一个整数,表示 N到M之间 (含 N和 M) 总共有多少个满足条件的正整数
样例输入
90 120
样例输出
2
参考答案:输入两个正整数N和M,输出N到M之间(含N和M)满足条件的正整数个数。
解析:【喵呜刷题小喵解析】:
首先,我们需要理解题目中的两个条件:
1. 转换为九进制之后为回文数:这意味着我们需要将每个数转换为九进制,然后检查它是否是回文数。回文数是指从前往后读和从后往前读都一样的数。
2. 转换为九进制后每个数位上的数字都是奇数:这意味着我们需要检查九进制表示的每个数位上的数字是否为奇数。
由于N和M的范围都在1到5000之间,我们可以使用一个循环从N遍历到M,对于每个数,我们都将其转换为九进制,然后检查它是否满足上述两个条件。如果满足,我们就将计数器加1。
最后,我们输出计数器的值,即为满足条件的正整数个数。
需要注意的是,由于题目中给出了时间限制和内存限制,我们需要尽可能地优化算法,避免不必要的计算。例如,我们可以预先计算并存储一些常用的九进制数,以减少转换的计算量。
另外,由于题目中只给出了样例输入和样例输出,没有给出具体的输入和输出格式,因此在实际编程时,我们需要根据具体的要求来确定输入和输出的格式。
9、收集宝石
题目描述:
聪聪在玩冒险岛游戏,为了召唤法力更强大的神龙,他必须尽可能收集更多的魔法宝石,每颗宝石都有不同的功效。不过在游戏里,几乎每一颗魔法宝石都会和另外一颗宝石相冲。相冲表示这两颗宝石不能同时拥有。例如,宝石A和宝石B 相冲,那么,你可以选择两颗宝石都不收集,也可以只收集宝石A 或者只收集宝石 B,但不能同时拥有宝石 A和宝石B现在给定了游戏里宝石的数量N(2≤N≤100),宝石从1到N依次编号,并给出M对(2≤M≤2000)相冲的宝石编号,请帮聪聪计算出最多能够收集到多少颗宝石。
例如: N=6,M=8时,6颗宝石的编号分别为 1、2、3、4、5、6,其中有8对相冲的宝石,对应编号如下:
1 2
2 3
2 4
2 5
2 6
3 4
4 5
5 6
这表示宝石1和宝石2相冲,宝石2和宝石3,4,5都相冲,宝石3和宝石4相冲,宝石4和宝石5相冲,宝石5和宝石6 相冲。
有三个方案收集到的宝石数量最多: (1 3 5)、(1 3 6)、(1 4 6),这些方案里,最多收集到的宝石数量都是3,所以程序输出3。
输入描述
第一行输入两个正整数N和 M(2≤N≤100,2≤M≤2000),分别表示游戏里的宝石数量和 M 对相冲的宝石,两个正整数之间用一个空格隔开。
接下来输入 M 行,每行两个正数,分别表示相冲的两颗宝石的编号,两个正整数之间用一个空格隔开
输出描述
输出一个整数,表示聪聪在游戏里最多能够收集到的宝石数量
样例输入
6 8 1 2 2 3 2 4 2 5 2 6 3 4 4 5 5 6
样例输出
3
参考答案:根据题目描述,我们可以使用图论中的最大团问题来解决这个问题。首先,我们可以将宝石看作图中的节点,如果两颗宝石相冲,则它们之间有一条边相连。这样,问题就转化为在图中找到最大的团,即最大的宝石集合,使得集合中的任意两颗宝石都不相冲。为了找到最大的团,我们可以使用回溯法来枚举所有可能的宝石集合,然后检查是否存在一个集合,使得集合中的任意两颗宝石都不相冲。回溯法的时间复杂度是指数级的,但是对于本题来说,宝石的数量最多只有100,所以回溯法是可以接受的。具体实现时,我们可以使用一个布尔数组来表示宝石的收集状态,数组的每个元素对应一个宝石,如果宝石被收集,则对应位置的元素为true,否则为false。然后,我们可以从空集开始,依次尝试添加宝石到集合中,直到无法添加更多的宝石为止。在添加宝石的过程中,我们需要检查新加入的宝石是否与集合中的任意一颗宝石相冲,如果相冲,则不能加入。最后,我们返回收集到的宝石数量最多的集合即可。
解析:【喵呜刷题小喵解析】:
本题是一道典型的图论问题,可以使用图论中的最大团问题来解决。最大团问题是一个NP-hard问题,但是对于本题来说,宝石的数量最多只有100,所以我们可以使用回溯法来枚举所有可能的宝石集合,然后检查是否存在一个集合,使得集合中的任意两颗宝石都不相冲。
回溯法是一种通过枚举所有可能的解来找到最优解的方法。在本题中,我们可以从空集开始,依次尝试添加宝石到集合中,直到无法添加更多的宝石为止。在添加宝石的过程中,我们需要检查新加入的宝石是否与集合中的任意一颗宝石相冲,如果相冲,则不能加入。
回溯法的时间复杂度是指数级的,但是对于本题来说,宝石的数量最多只有100,所以回溯法是可以接受的。最终,我们返回收集到的宝石数量最多的集合即可。
需要注意的是,虽然回溯法可以解决这个问题,但是在实际应用中,我们可能会遇到宝石数量更大的情况,这时候就需要使用更高效的算法来解决最大团问题,例如使用网络流、半定规划等方法。
10、简易炸弹超人
【题目描述】
有一块矩形游戏场地,场地被分成N×M的网格(4≤N≤100 ,4≤M≤10),其中一部分小方格是水域,另一部分小方格是陆地。
为防御敌军攻击,玩家需要在游戏场地安置炸弹:
1. 炸弹只能安置在陆地上;
2. 每颗炸弹爆炸后,可以波及到炸弹所在的小方格,及相邻的上、下、左、右小方格;
3. 任意两颗炸弹爆炸后不能波及到同一个小方格。
请帮助玩家计算出如何安置炸弹,可以使炸弹波及到的范围最大,输出最多可以波及到的小方格数量。
例如:N=4,M=4,网格中水域和陆地的情况如图1所示:
图中,蓝色区域代表水域,绿色区域代表陆地;安置炸弹的最优方案之一如图2所示;炸弹波及的范围如图3所示(黑色区域)。
这块4×4的矩形游戏场地最多可以波及到11个小方格,其他方案都不会优于这个结果
【输入格式】
第一行输入两个正整数N和M(4≤N≤100 ,4≤M≤10 ),分别表示网格的行数和列数,两个正整数之间以一个空格隔开
接下来输入N行,每行M个字符(字符只能是大写字母A或B),A表示水域,B表示陆地,字符之间以一个空格隔开.
【输出格式】
输出一个整数,表示最多可以波及到的小方格数量
【样例输入】
4 4 B A A A A B A B B A B B A B A A
【样例输出】
11
参考答案:首先,我们需要读取输入的行数和列数,以及每个方格的状态(水域或陆地)。然后,我们可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来遍历每个陆地方格,并尝试放置炸弹。对于每个陆地方格,我们可以递归地搜索其相邻的方格,并标记它们为已访问。如果相邻的方格已经被访问,则不能放置炸弹。最后,我们可以计算访问的方格数量,并更新最大访问方格数。
解析:【喵呜刷题小喵解析】:
这个问题是一个典型的图论问题,可以使用深度优先搜索或广度优先搜索来解决。由于炸弹爆炸的范围是相邻的上、下、左、右小方格,我们可以使用DFS或BFS来遍历这些方格,并计算可以访问的方格数量。
具体的思路如下:
1. 读取输入的行数和列数,以及每个方格的状态(水域或陆地)。
2. 初始化一个访问数组,用于标记每个方格是否已经被访问。
3. 对于每个陆地方格,我们可以尝试放置炸弹,并递归地搜索其相邻的方格,并标记它们为已访问。
4. 如果相邻的方格已经被访问,则不能放置炸弹。
5. 最后,我们可以计算访问的方格数量,并更新最大访问方格数。
由于炸弹爆炸的范围是相邻的上、下、左、右小方格,我们可以使用DFS或BFS来遍历这些方格,因此时间复杂度为O(NM),其中N是行数,M是列数。由于每个方格只被访问一次,因此空间复杂度为O(NM)。
需要注意的是,由于炸弹不能波及到同一个小方格,因此我们需要使用访问数组来避免重复访问同一个方格。另外,由于炸弹只能安置在陆地上,因此我们需要先读取每个方格的状态,并判断是否为陆地。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!