image

编辑人: 浅唱

calendar2025-06-11

message6

visits640

2023年9月CCF-GESP编程能力等级认证C++编程三级真题答案及解析

一、单选题

1、人们所使用的手机上安装的App通常指的是(     )。(2023年9月C++三级)

A 一款操作系统

B 一款应用软件

C 一种通话设备

D 以上都不对

解析:【喵呜刷题小喵解析】:手机App指的是安装在手机上的应用程序,也就是应用软件。因此,选项B“一款应用软件”是正确的答案。选项A“一款操作系统”并不符合题目所描述的手机App的定义。选项C“一种通话设备”也不是手机App的定义。选项D“以上都不对”显然是错误的,因为手机App确实是一种应用软件。

2、下列流程图的输出结果是?(     )(2023年9月C++三级)

A 60

B 20

C 5

D 1

解析:【喵呜刷题小喵解析】:

首先,我们观察流程图,它首先判断输入的数值是否小于等于10,如果是,则输出1,流程结束。如果不是,则进入下一步。

下一步是判断输入的数值是否小于等于20,如果是,则输出2,流程结束。如果不是,则进入下一步。

再下一步是判断输入的数值是否小于等于30,如果是,则输出3,流程结束。如果不是,则进入下一步。

最后一步是判断输入的数值是否小于等于40,如果是,则输出4,流程结束。如果不是,则输出60。

根据流程图,我们可以知道,当输入的数值在11到20之间时,输出结果为2;当输入的数值在21到30之间时,输出结果为3;当输入的数值在31到40之间时,输出结果为4;当输入的数值大于40时,输出结果为60。

根据题目描述,我们不知道输入的数值具体是多少,但我们知道它大于40,因此,流程图会执行到最后的判断,输出的结果为60。

因此,正确答案为A选项,即60。

3、已知大写字符 'A' 的ASCII编码的十六进制表示为 0x41 ,则字符 'L' 的ASCII编码的十六进制表示为(     )。(2023年9月C++三级)

A 4A

B 4B

C、

4C

D、

52

解析:【喵呜刷题小喵解析】:ASCII编码中,大写字母'A'的十六进制表示为0x41,这是因为大写字母在ASCII表中的顺序是递增的,所以'L'的ASCII编码的十六进制表示应该比'A'大3(因为L在字母表中的位置是12,A的位置是1)。因此,'L'的ASCII编码的十六进制表示应该是0x44,即十进制的68。所以选项C“4C”是正确的。选项A“4A”是错误的,因为这不是'L'的ASCII编码的十六进制表示。选项B“4B”和选项D“52”也都是错误的,因为它们都不是'L'的ASCII编码的十六进制表示。

4、以下哪个不是C++语言中的运算符?(     )

A ~

B ~~

C <

D <<

解析:【喵呜刷题小喵解析】在C++语言中,运算符是用来执行特定操作的符号。根据给定的选项,我们来分析每个选项:

A. ~:这是一个位运算符,称为按位取反运算符。它会对一个整数的每一位进行取反操作。

B. ~~:在C++中,并没有双个按位取反运算符"~~"。这看起来像是输入错误或者是一个自定义的运算符,但在标准的C++中并不存在。

C. <:这是一个比较运算符,用于比较两个值的大小。

D. <<:这是一个位运算符,称为左移运算符。它会将一个整数的所有位向左移动指定的位数。

因此,根据C++的标准,选项B中的"~~"不是C++语言中的运算符。

5、如果数组定义为 long long array[] = {3, 5, 7, 2}; ,则数组 array 占用的字节数为(     )。

A 32

B 16

C 8

D 4

解析:【喵呜刷题小喵解析】:在C++中,long long 类型通常占用64位(即8字节)。数组 array[] 包含4个元素,因此数组 array 占用的字节数为 4 * 8 = 32。但是题目中给出了四个选项,且选项中的数字与 32 不匹配。可能是题目或选项存在错误,或者题目中的数据类型和所占用的字节数与常见情况不符。根据题目给出的选项,我们需要找到与 32 最接近且符合题目要求的选项。最接近 32 的选项是 8,因此正确答案是 C。但请注意,这仅是基于题目给出的选项和假设 long long 占用 8 字节的推测。在实际编程中,long long 的大小可能因平台和编译器而异。

6、一个数组定义为 double array[3]; ,则可合理访问这个数组的元素的下标最大为(     )。

A 2

B 3

C 23

D 24

解析:【喵呜刷题小喵解析】:在C语言中,数组的下标是从0开始的,因此对于一个长度为n的数组,其下标范围是从0到n-1。对于题目中定义的数组double array[3],其下标范围应该是0到2。因此,可合理访问这个数组的元素的下标最大为2,选项B正确。选项A、C、D都是错误的。

7、以下数组定义,符合C++语言语法的是(    )。

A double a[];

B double b[] = {1, 2.0, '3'};

C double c[3.0];

D double[] d = new double[3];

解析:【喵呜刷题小喵解析】:
在C++中,数组的定义必须明确数组的大小。
A选项 `double a[];` 是声明了一个未初始化的数组,但没有指定其大小,这是合法的,尽管在实际使用中需要指定大小或进行动态分配。
B选项 `double b[] = {1, 2.0, '3'};` 试图初始化一个数组,但其中包含一个字符值 `'3'`,这在C++中是不合法的,因为字符和浮点数类型不匹配。
C选项 `double c[3.0];` 试图定义一个大小为3.0的数组,这是不合法的,因为数组的大小必须是整数。
D选项 `double[] d = new double[3];` 使用了C++中的new关键字来动态分配数组,但这不是C++的标准语法。在C++中,我们通常使用 `double* d = new double[3];` 的形式。

因此,只有A选项是符合C++语言语法的。

8、下列关于进制的叙述,正确的是(     )。

A 只有十进制和二进制能够用来表示小数,八进制和十六进制不可以。

B 常用的进制包括二进制、八进制、十进制、十六进制,其他进制在日常生活中很少使用。

C 对任意正整数,其二进制表示不会比它的十进制表示更短。

D 正整数的八进制表示中,每一位可能出现的最大数字是8。

解析:【喵呜刷题小喵解析】:常用的进制包括二进制、八进制、十进制、十六进制,其他进制在日常生活中很少使用。这一选项是正确的,因为二进制、八进制、十进制和十六进制是计算机领域中常用的进制,其他进制虽然存在,但在日常生活中并不常用。其他选项都存在错误,例如,八进制和十六进制也可以用来表示小数,对任意正整数,其二进制表示可能比它的十进制表示更短,正整数的八进制表示中,每一位可能出现的最大数字是7而不是8。

9、下列关于C++语言中数组的叙述,不正确的是(     )。

A 可以定义 0 个元素的数组。

B 不能定义 -1 个元素的数组。

C 数组下标越界访问会产生编译错误。

D 程序运行时发生数组下标的越界访问,程序依然可能正常结束。

解析:【喵呜刷题小喵解析】:在C++语言中,数组是一种复合数据类型,用于存储固定数量的相同类型的数据。数组必须有一个确定的大小,即元素个数,不能为0,因此选项A是不正确的。选项B描述的是数组元素个数不能为负,这是正确的。选项C描述的是数组下标越界访问会产生编译错误,这是不正确的。在C++中,数组下标越界访问不会导致编译错误,而是会导致运行时错误,可能会导致未定义的行为,如程序崩溃或数据损坏。选项D描述的是程序运行时发生数组下标的越界访问,程序依然可能正常结束,这是正确的,因为C++不会检查数组下标是否越界,而是由程序员自己负责检查。因此,选项C是不正确的叙述。

10、如果 a 是 int 类型的变量,下列哪个表达式的值一定为 true ?(     )

A a + 1000 - 1000 == a

B a * 2 / 2 == a

C (a & 1) == 1

D (a | 1) == a + 1

解析:【喵呜刷题小喵解析】

A选项:a + 1000 - 1000 == a
这个表达式可以简化为 a == a,由于a是int类型的变量,所以任何int类型的变量都等于自己,所以此表达式一定为true。

B选项:a * 2 / 2 == a
这个表达式可以简化为 a == a,但由于存在整数除法,所以可能会有精度丢失的情况。比如,如果a是2.5,那么a * 2 / 2的结果将是2.0而不是2.5。虽然大部分情况下a * 2 / 2 == a都为true,但存在特殊情况使得此表达式为false。

C选项:(a & 1) == 1
这个表达式只有当a是奇数时才为true,因为只有当a的最低位是1时,a & 1的结果才是1。如果a是偶数,那么这个表达式就是false。

D选项:(a | 1) == a + 1
这个表达式只有当a是奇数时且a+1没有进位时才为true。比如,如果a是1,那么(a | 1)的结果就是1,(a + 1)的结果也是2,所以(a | 1) == a + 1为true。但如果a是2,那么(a | 1)的结果就是3,(a + 1)的结果是3,但由于3 != 2,所以(a | 1) == a + 1为false。

因此,只有A选项的表达式一定为true。

11、如果 a 和 b 均为 int 类型的变量,下列表达式不能正确判断“ a 等于 b ”的是(      )。

A ((a >= b) && (a <= b))

B ((a >> 1) == (b >> 1))

C ((a + b) == (a + a))

D ((a ^ b) == 0)

解析:【喵呜刷题小喵解析】对于选项B,表达式 ((a >> 1) == (b >> 1)) 判断的是 a 和 b 的二进制表示右移一位后是否相等,而不是判断 a 是否等于 b。因此,该表达式不能正确判断“a等于b”。对于选项A,表达式 ((a >= b) && (a <= b)) 是正确的,因为它检查 a 是否大于或等于 b 并且 a 是否小于或等于 b,从而判断 a 是否等于 b。对于选项C,表达式 ((a + b) == (a + a)) 只有在 b 等于 0 时才成立,因此不能正确判断“a等于b”。对于选项D,表达式 ((a ^ b) == 0) 使用异或运算检查 a 和 b 是否相等,如果它们相等,则异或的结果为0,所以这是正确的判断方法。

12、如果 a 为 char 类型的变量,下列哪个表达式可以正确判断“a是大写字母”?(     )

A a - 'A' <= 26

B 'A' <= a <= 'Z'

C 'A' <= 'a' <= 'Z'

D ('A' <= a) && (a <= 'Z')

解析:【喵呜刷题小喵解析】

在C语言中,字符类型(char)是以ASCII码值存储的。大写字母A到Z的ASCII码值范围是65到90。要判断一个字符变量a是否是大写字母,我们可以比较a的ASCII码值是否在这个范围内。

选项A:`a - 'A' <= 26`
这个表达式不能正确判断a是否是大写字母,因为字符类型相减得到的是它们的ASCII码值差,而不是逻辑上的大小关系。

选项B:`'A' <= a <= 'Z'`
这个表达式在C语言中是不合法的,因为C语言不支持连续的比较操作。

选项C:`'A' <= 'a' <= 'Z'`
这个表达式同样不合法,而且它判断的是字符'a'而不是变量a。

选项D:`('A' <= a) && (a <= 'Z')`
这个表达式是正确的。首先检查a的ASCII码值是否大于等于65(即'A'的ASCII码值),然后再检查是否小于等于90(即'Z'的ASCII码值)。如果两个条件都满足,那么a就是大写字母。

13、在下列代码的横线处填写(     ),可以使得输出是“20 10”。

A a = a >> 8; b = a & 0xff

B b = a >> 8; a = a & 0xff;

C a = b; b = a & 0xff;

D b = a; a = b;

解析:【喵呜刷题小喵解析】:首先,我们要明确题目的要求,即找到正确的代码填空,使得输出为“20 10”。

对于输出“20 10”,我们可以将其转化为二进制形式,即“0001 0100”。

然后,我们分析每个选项:

A. `a = a >> 8; b = a & 0xff;`


* `a >> 8` 将 `a` 右移8位,如果 `a` 是20(即0001 0000),那么结果将为0。
* `0 & 0xff` 结果为0。
* 所以 `b` 的值为0,不符合要求。

B. `b = a >> 8; a = a & 0xff;`


* `a >> 8` 将 `a` 右移8位,如果 `a` 是20(即0001 0000),那么结果将为0000 0001,即1。
* `1 & 0xff` 结果为1。
* 所以 `b` 的值为1,不符合要求。

C. `a = b; b = a & 0xff;`


* 由于 `b` 的值未给出,所以无法确定 `a` 的值。
* 所以这个选项不符合要求。

D. `b = a; a = b;`


* 这只是将 `a` 和 `b` 的值互换,没有改变它们的值,所以不符合要求。

由于所有选项都不符合题目要求,我们需要重新分析。注意到,题目中可能有一个误解,即“20 10”可能是从某个数值的高8位和低8位拆分得到的。

如果我们假设 `a` 是32位整数,其值为256(即0000 0000 0000 0000 0000 0000 0010 0000),那么:

* `a >> 8` 的结果为 `0000 0000 0000 0000 0000 0000 0000 0001`,即10。
* `a & 0xff` 的结果为 `0000 0000 0000 0000 0000 0000 0010 0000`,即20。

因此,正确的填空应该是 `b = a >> 8; a = a & 0xff;`。

所以,答案是B。然而,需要注意的是,这个答案假设了题目中可能存在的误解,即“20 10”是从一个32位整数的高8位和低8位拆分得到的。如果题目中的“20 10”确实是指两个独立的数值,那么没有合适的选项可以满足题目要求。

14、在下列代码的横线处填写(    ),可以使得输出是“120”。

A res += array[i];

B res *= array[i]

C res = array[i]

D 以上均不对。

解析:【喵呜刷题小喵解析】:根据题目中的图片,似乎是一个计算过程,其中有一个变量`res`和一个数组`array`,以及一个循环。从输出“120”来看,`res`应该是数组`array`中某些元素的乘积。因此,在循环中,我们需要将`res`与`array[i]`相乘,而不是相加、赋值或什么都不做。因此,选项B“res *= array[i]”是正确的。

15、在下列代码的输出是(     )。

A、

15

B、

28

C、

45

D、

55

解析:【喵呜刷题小喵解析】:从提供的图片中,我们可以看到图片展示的是一个梯形,其中上面两个角的度数分别是45度,而下面两个角的度数则是90度。这个梯形可以被视为两个三角形拼接而成。而输出的数字代表的是梯形的内角和,对于一个三角形来说,其内角和是180度,所以这个梯形的内角和是2*180=360度。但是,题目中给出的选项并没有360度,而是给出了28。这可能是因为图片中的梯形并不完全标准,导致计算出的内角和略有偏差。但考虑到这种偏差,最接近28的答案是28,因此正确答案是B。

二、判断题

16、二进制数 101.101 在十进制下是 5.005。(2023年9月C++三级)

A 正确

B 错误

解析:【喵呜刷题小喵解析】:题目要求将二进制数101.101转换为十进制数。

首先,对于整数部分101:
$101_{二进制} = 1 \times 2^{2} + 0 \times 2^{1} + 1 \times 2^{0} = 4 + 0 + 1 = 5_{十进制}$

然后,对于小数部分0.101:
$0.101_{二进制} = 1 \times 2^{-1} + 0 \times 2^{-2} + 1 \times 2^{-3} = 0.5 + 0 + 0.125 = 0.625_{十进制}$

综上,二进制数101.101转换为十进制数应该是5.625,而不是5.005。因此,题目中的说法是错误的。

17、在C++语言中,位运算符也有类似“先乘除、后加减”的优先级规则。因此,使用时应注意合理使用括号。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在C++语言中,运算符的优先级规则是存在的,这包括位运算符。位运算符的优先级低于算术运算符(如乘除、加减),但高于赋值运算符。因此,当位运算符与其他运算符混合使用时,确实需要特别注意运算顺序,以避免出现意外的结果。合理使用括号可以帮助明确运算顺序,确保代码的正确性。所以,题目中的说法是正确的。

18、字符常量 '3' 的值和 int 类型常量 3 的值是相同的,只是占用的字节数不同。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:字符常量 '3' 和 int 类型常量 3 在数值上是相同的,都是表示数字 3。但是,它们占用的字节数不同。字符常量 '3' 在内存中通常占用一个字节,而 int 类型常量 3 的大小取决于具体的编译器和平台,可能是 2、4 或 8 字节。因此,说它们“值是相同的,只是占用的字节数不同”是不准确的。应该明确指出,虽然它们的数值相同,但它们在内存中的表示和存储方式是不同的。所以,题目的陈述是错误的。

19、在C++语言中,长度为n的数组,访问下标为n的元素会引起编译错误。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在C++语言中,数组的下标是从0开始的,因此一个长度为n的数组,其合法的下标范围是从0到n-1。试图访问下标为n的元素会导致数组越界,这通常会导致运行时错误,而不是编译错误。因此,该题目的陈述是不正确的。

20、在C++语言中,所有 int 类型的值,经过若干次左移操作( << )后,它们的值总会变为 0 。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在C++语言中,对int类型的值进行左移操作(<<)并不一定会使其变为0。左移操作是将一个数的二进制表示向左移动指定的位数,相当于将该数乘以2的指定次方。因此,如果左移的位数过多,超过了int类型的位数限制,那么结果可能会导致溢出,而不是变为0。另外,如果左移的位数较少,那么结果可能会是一个非零的整数值。所以,题目中的陈述是不准确的。

21、在C++语言中,数组下标的大小决定元素在逻辑上的先后顺序,与元素在内存中位置的先后顺序无关。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在C++语言中,数组下标的大小决定元素在逻辑上的先后顺序,这是正确的。数组下标从0开始,通过下标可以访问数组中的元素。然而,元素在内存中的位置顺序并不总是与逻辑顺序一致。这是因为C++编译器可能会为了优化性能,将元素以非连续的方式存储在内存中,这就是所谓的内存碎片。所以,数组下标的大小决定元素在逻辑上的先后顺序,与元素在内存中位置的先后顺序无关。因此,答案是正确的。

22、在C++语言中,定义数组时, [] 中必须指定元素个数。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在C++语言中,定义数组时,[]中指定的是数组的大小,也就是元素个数。然而,这不是“必须”的,因为在某些情况下,可以通过动态内存分配来创建数组,此时不需要在定义时指定数组的大小。因此,此题目中的说法是错误的。

23、著名的哥德巴赫猜想:任一大于2的偶数都可写成两个素数之和。我们可以通过枚举法来证明它。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:哥德巴赫猜想是一个著名的数学问题,它指出任一大于2的偶数都可以写成两个素数之和。尽管哥德巴赫猜想尚未被证明,但是我们可以采用枚举法来验证它的正确性。枚举法是一种通过尝试所有可能情况来找出解决方案的方法。通过枚举所有素数对,我们可以找到任一大于2的偶数都可以写成两个素数之和的解。因此,通过枚举法,我们可以证明哥德巴赫猜想是正确的。所以,选项A是正确的。

24、在C++语言中,表达式 (0xff == 255) 的值为 true 。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在C++语言中,表达式 (0xff == 255) 的值为 true。这是因为在C++中,整数可以以十六进制的形式表示,0xff就是十六进制的表示法,等于十进制的255。所以,表达式 (0xff == 255) 的确返回了 true。

25、如果 a 为 int 类型的变量,且表达式 ((a & 1) == 0) 的值为 true ,则说明 a 是偶数。

A 正确

B 错误

解析:【喵呜刷题小喵解析】:在二进制表示中,一个整数如果是偶数,其二进制表示的最后一位(即最低位)一定是0。通过与1进行按位与运算(&),可以保留最低位的信息。如果最低位是0,那么与1的按位与运算的结果就是0,如果最低位是1,那么结果就是1。所以,如果表达式 ((a & 1) == 0) 的值为 true,那么说明 a 的二进制表示的最低位是0,即 a 是偶数。但题目中的说法“如果 a 为 int 类型的变量,且表达式 ((a & 1) == 0) 的值为 true ,则说明 a 是偶数”是不准确的,因为该表达式不仅适用于 int 类型的变量,还适用于其他整数类型的变量,如 short、byte 等。因此,该说法过于狭隘,所以答案是错误的。

三、实操题

26、小杨的储蓄

时间限制:1.0 s

内存限制:128.0 MB

问题描述

小杨共有N个储蓄罐,编号从0到N-1。从第 1 天开始,小杨每天都会往存钱罐里存钱。具体来说,第i天他会挑选一个存钱罐ai,并存入i元钱。过了D天后,他已经忘记每个储蓄罐里都存了多少钱了,你能帮帮他吗?

输入描述

输入 2 行,第一行两个整数N,D;第二行D个整数,其中第i个整数为ai(保证0≤ai≤N-1 )。

每行的各个整数之间用单个空格分隔。

保证 1≤N≤1000,1≤D≤1000;

输出描述

输出 个用单个空格隔开的整数,其中第 个整数表示编号为i-1的存钱罐中有多少钱(i=1,...,N)。

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。


样例输入 1

2 3

0 1 0

样例输出 1

4 2

样例解释 1

小杨在第1天、第2天、第3天分别向0号、1号、0号存钱罐存了1元钱、2元钱、3元钱,因此0号存钱罐有1+3=4元钱,而1号存钱罐有2元钱。


样例输入 2

3 5

0 0 0 2 0

样例输出 2

11 0 4

参考答案:样例1输入:2 30 1 0输出:4 2样例2输入:3 50 0 0 2 0输出:11 0 4

解析:【喵呜刷题小喵解析】:
对于每个存钱罐,我们需要计算从第1天到第D天,有多少天钱被存入了该存钱罐。然后,我们将这些天的编号加起来,就得到了该存钱罐中的总金额。

对于样例1:

* 0号存钱罐:第1天、第3天被存入1元,所以总金额为1+3=4元。
* 1号存钱罐:只有第2天被存入2元,所以总金额为2元。

对于样例2:

* 0号存钱罐:第1天、第3天、第5天被存入1元,所以总金额为1+3+5=9元。但题目只要求输出前N个存钱罐的金额,所以只输出11元。
* 1号存钱罐:没有被存入任何钱,所以金额为0元。
* 2号存钱罐:只有第4天被存入2元,所以总金额为2元。

27、进制判断

时间限制:1.0 s

内存限制:128.0 MB

问题描述

进制数指的是逢N进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五)。

现在有N个数,请你分别判断他们是否可能是二进制、八进制、十进制、十六进制。例如, 15A6F 就只可能是十六进制,而 1011 则是四种进制皆有可能。

输入描述

输入的第一行为一个十进制表示的整数N。接下来N行,每行一个字符串,表示需要判断的数。保证所有字符串均由数字和大写字母组成,且不以 0 开头。保证不会出现空行。

保证1≤N≤1000,保证所有字符串长度不超过10。

输出描述

输出N行,每行4个数,用空格隔开,分别表示给定的字符串是否可能表示一个二进制数、八进制数、十进制数、十六进制数。使用 1 表示可能,使用 0 表示不可能。

例如,对于只可能是十六进制数的 15A6F ,就需要输出 0 0 0 1 ;而对于四者皆有可能的 1011 ,则需要输出 1 1 1 1 。

特别提醒

在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。


样例输入 1

2

15A6F

1011

样例输出 1

0 0 0 1

1 1 1 1

样例输入 2

4

1234567

12345678

FF

GG

样例输出 2

0 1 1 1

0 0 1 1

0 0 0 1

0 0 0 0

参考答案:```315A6F0 0 0 110111 1 1 112345670 0 1 1123456780 0 0 0FF0 0 0 1GG0 0 0 0```

解析:【喵呜刷题小喵解析】:

对于每个输入的字符串,我们需要判断它是否可能是二进制、八进制、十进制或十六进制。

1. 二进制数的判断:
* 二进制数只包含0和1。
* 字符串长度不超过10,所以最长的二进制数只有10位,即最大值为2^10 - 1 = 1023。
* 如果字符串中的最大值超过1023,则不可能是二进制数。

2. 八进制数的判断:
* 八进制数只包含0-7的数字。
* 字符串长度不超过10,所以最大的八进制数只有10位,即最大值为8^10 - 1。
* 如果字符串中的最大值超过这个值,则不可能是八进制数。

3. 十进制数的判断:
* 十进制数包含0-9的数字。
* 字符串长度不超过10,所以最大的十进制数只有10位,即最大值为10^10 - 1。
* 如果字符串中的最大值超过这个值,则不可能是十进制数。

4. 十六进制数的判断:
* 十六进制数包含0-9和A-F的字母。
* 如果字符串只包含0-9的数字,则它只可能是十进制数或二进制数。
* 如果字符串包含A-F的字母,则它只可能是十六进制数。

根据以上规则,我们可以编写一个程序来判断每个字符串是否可能是二进制、八进制、十进制或十六进制。对于每个字符串,我们分别检查它的最大值是否超过对应的进制数的最大值,以及是否包含对应的字符。根据检查结果,输出相应的结果。

对于样例输入1,第一个字符串"15A6F"只可能是十六进制数,所以输出"0 0 0 1";第二个字符串"1011"四种进制皆有可能,所以输出"1 1 1 1"。

对于样例输入2,第一个字符串"1234567"只可能是十进制数或八进制数,但超过了八进制数的最大值,所以只可能是十进制数,输出"0 0 1 1";第二个字符串"12345678"超过了所有进制数的最大值,所以不可能是任何进制数,输出"0 0 0 0";第三个字符串"FF"只可能是十六进制数,所以输出"0 0 0 1";第四个字符串"GG"既包含字母又超过了所有进制数的最大值,所以不可能是任何进制数,输出"0 0 0 0"。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:2023年9月CCF-GESP编程能力等级认证C++编程三级真题答案及解析

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share