乔斯等级考试模拟题C++三级全解析

四季读书网 1 0
乔斯等级考试模拟题C++三级全解析
乔斯等级考试模拟题C++三级全解析-第1张图片-四季读书网

一、单选题  每题 2 分,共 30 分

1

答案:C

GESP 一级可选语言有 Python、C++、Scratch 三种。

2

答案:B

闰年判定规则:能被 400 整除,或(能被 4 整除且不能被 100 整除)。即 (yr%400==0) || (yr%4==0 && yr%100!=0)。

3

答案:C

32 位有符号 int 的范围是 -2^31 ~ 2^31-1,即约 -21 亿 ~ 21 亿。

4

答案:C

十进制转八进制:每次取余 8 存数组,除以 8 继续,下标自增。应填入 oct_number[i++] = decimal % 8; decimal /= 8;

5

答案:C

二进制 101.11 = 1x4 + 0x2 + 1x1 + 1x0.5 + 1x0.25 = 5.75。注意小数部分的位权分别是 1/2 和 1/4。

6

答案:D

arr[1] = 2,p = 2,p + 2 = 4。注意 p 是普通 int 变量不是指针。

7

答案:D

min() 函数必须传参数,无参调用编译报错,不会默认返回 0。A/B/C 均正确。

8

答案:A

2 字节 = 16 位无符号整数,范围 0 ~ 2^16-1 = 65535。注意 unsigned 没有负数。

9

答案:A

代码实现相邻两位交换(不用临时变量的异或技巧)。每步 i+=2,将 arr[0]&arr[1]、arr[2]&arr[3]、arr[4]&arr[5] 两两交换,结果为 {2,1,4,3,6,5}。

10

答案:A

a=3(011), b=7(111), a&b=3(011); c=15(1111), d=4(0100), c^d=11(1011); 3|11=11(1011)。结果是十进制 11。

11

答案:B

sizeof(arr)/sizeof(arr[0]) = 24/4 = 6,数组共 6 个元素。这是求数组长度的经典写法。

12

答案:B

sizeof(s)=10(数组总字节),strlen(s)=5(实际字符串长度),10-5=5。注意 sizeof 计算的是数组声明时分配的空间。

13

答案:C

1+2+...+1000 直接用等差数列求和公式 n(n+1)/2 即可,不需要枚举。其他选项用枚举法都是合理的选择。

14

答案:A

枚举鸡的数量 x(0~35),兔的数量 y=35-x,验证 2x+4y==94。只需枚举 36 次,效率最高。B 中兔枚举到 94 范围太大;C 双重循环枚举 10000 次太慢。

15

答案:D

如果 str[i]+3 超过 'z'(122),则从 'a' 重新开始。D 的写法 a+(str[i]+3-'z')-1 正确计算了循环后的位置。注意判断条件用 str[i]+3 > 'z' 而非 str[i] > 122。

二、判断题  每题 2 分,共 20 分

16

正确

GESP 认证同一级别的能力与编程语言无关,不同语言考察的核心是相同的编程思维和算法能力。

17

正确

整数 -6 的 16 位补码:原码 1000 0000 0000 0110,反码 1111 1111 1111 1001,补码 1111 1111 1111 1010,即十六进制 FFFA。

18

正确

补码的核心优势就是将减法转化为加法(加上负数的补码),简化了 ALU 的硬件设计,统一了加减运算。

19

错误

a++ 先取值再自增,取值 5;++b 先自增再取值,取值 4;c = 5 + 4 = 9,不是 8。

20

错误

位运算符 & | ^ ~ 的优先级低于算术运算符 + - * /。例如 a+b&c 会先算 a+b 再 &c。

21

正确

int a[] = {1,2,3,4,5}; 正确定义了包含 5 个元素的整型数组,编译器自动推断数组大小。

22

正确

3>2 为 true,三目运算符取 arr[1] = 2,输出 2。三目运算符 a>b?x:y 等同于 if-else 的逻辑。

23

错误

字符 '1' 的 ASCII 码是 49,数字 1 是整数 1,两者值不相等。char 和 int 在 0-255 范围内可以类型互换但值不同。

24

错误

0xf0 + 0x0f = 0xff = 255,表达式 ((0xf0 + 0x0f) == 255) 本身为 true。但题目原文描述有误(说表达式少括号),根据解析判为错误。

25

正确

a 最低位为 0,则 a&1=0;0&3=0;((a&3&1)==0) = (0==0) = true。最低位决定奇偶性,偶数的 a&1 恒为 0。

三、编程题

题目 A  ·  苹果

给定 n 个整数,要求修改某些数,使得最终序列满足:每个数都是正整数,且后面的数严格大于前面的数。求修改后所有数之和的最小值。

参考代码:

#include<bits/stdc++.h>

using namespace std;

long long a[1005];

int main(){

    int n;

    long long cnt=0;

    cin>>n;

    for(int i=1;i<=n;i++)cin>>a[i];

    for(int i=2;i<=n;i++){

        if(a[i-1]>=a[i])a[i]=a[i-1]+1;

    }

    for(int i=1;i<=n;i++) cnt+=a[i];

    cout<<cnt;

    return 0;

}

解题思路:

1

保留首元素:第一个数不用修改,直接保留原值 a[1]。因为前面没有约束条件。

2

贪心修正:从 i=2 开始遍历,如果 a[i] <= a[i-1](不满足严格递增),则将 a[i] 改为 a[i-1]+1。这样保证刚好大 1,总和最小。

3

无需修改的情况:如果 a[i] > a[i-1],说明已经满足递增条件,不做任何改动。

4

累加求和:最后遍历整个数组累加,即为修改后的最小总和。使用 long long 防止溢出。

题目 B  ·  趣味数字闯关:统计二进制回文数

输入一个正整数 n,统计 1~n 中有多少个整数的二进制表示是回文数(即正读反读都一样)。

参考代码:

#include <iostream>

using namespace std;

int main() {

    int n, a[50] = {0}, ans = 0;

    cin >> n;

    for(int i = 1; i <= n; i++) {

        int t = i, pos = 0;

        while(t) {

            a[pos++] = t % 2;

            t /= 2;

        }

        bool ok = true;

        for(int i = 0; i < pos; i++)

            if(a[i] != a[pos - i - 1]) {

                ok = false;

                break;

            }

        ans += ok;

    }

    cout << ans;

    return 0;

}

解题思路:

1

暴力枚举:从 1 到 n 逐个遍历每个整数,对每个数分别判断其二进制是否为回文。

2

十进制转二进制:使用短除法:不断对 2 取余存入数组 a[pos++],然后除以 2,直到 t 变为 0。数组存储的是从低位到高位的二进制位。

3

数组判回文:双指针法:a[i] 与 a[pos-i-1] 两两对比,如果有任何一对不相等,则不是回文。注意内层循环变量 i 与外层循环变量 i 冲突,实际代码应避免同名。

4

统计计数:用 ans += ok 累加满足回文条件的数的个数,最后输出 ans。时间复杂度 O(n log n)。

备考提示

本次三级模拟题涵盖:进制转换(二进制/八进制/十六进制)、位运算(& | ^ ~)与优先级、补码与原码、数组与 sizeof/strlen、枚举算法与贪心策略、三目运算符、字符串加密、GESP 考试常识等核心考点。建议重点掌握:二进制与十进制互转、位运算的真值表与优先级、补码的计算方法、枚举法的使用场景与效率优化。

乔斯等级考试模拟题C++三级全解析-第2张图片-四季读书网

抱歉,评论功能暂时关闭!