CCF GESP 2025年3月认证 C++ 3级试题
CCF GESP 2025年3月认证 C++ 3级试题
- 场次:2025年3月
- 满分:100 分
- 题目来源:官方直发原件
1 单选题(每题 2 分,共 30 分)
Base64 编码将每 3 字节的输入数据编码为 4 字节的输出数据。如果输入数据长度不是 3 的倍数,会用 = 号填充。在 Base64 编码中,如果输入字符串的长度为 10 字节,编码后的字符串长度是多少( )
UTF-8 编码规则如下:
1 字节:0xxxxxxx
2 字节:110xxxxx 10xxxxxx
3 字节:1110xxxx 10xxxxxx 10xxxxxx
4 字节:11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
以下哪个字节序列是合法的 UTF-8 编码( )
在 8 位二进制原码表示中,八进制数 -5 的二进制形式是什么( )
十进制数 111.111 的二进制表示可以是下面的( )。
在 C++ 中,补码的主要作用是( )
在 C++ 中,一个 8 位有符号整数(使用补码表示)的范围是( )
在 C++ 中,以下代码的输出是什么( )
int a = -5;
unsigned int b = a;
cout << b;
下列程序的作用是( )
int main() {
int decimal = 25;
cout << oct << decimal;
return 0;
}
下面程序目的是将十进制数 255 转换为十六进制输出,横线处应填写的语句是( )
#include <iostream>
using namespace std;
int main() {
int decimal = 255;
_______________________
return 0;
}
以下代码的说法正确的是什么( )
#include <iostream>
using namespace std;
int main() {
int a = 0b1101;
int b = 0b1011;
cout << (a ^ b);
return 0;
}
下面枚举法查找最大值索引程序中,横线处应该填写的是( )
#include <iostream>
using namespace std;
int main() {
int arr[] = {3, 7, 2, 9, 5};
int maxIndex = 0;
for (int i = 1; i < 5; i++) {
_______________________
{
maxIndex = i;
}
}
cout << maxIndex;
return 0;
}
以下代码的功能是将数组中的奇数和偶数分别放在数组的前半部分和后半部分,横线处应该填入的是( )
#include <iostream>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 4, 5};
int left = 0, right = 4;
while (left < right) {
while (arr[left] % 2 == 1 && left < right) left++;
_______________________
if (left < right) {
swap(arr[left], arr[right]);
}
}
for (int i = 0; i < 5; i++) {
cout << arr[i] << " ";
}
return 0;
}
下面程序最后能够得到 HelloC++ 的是( )
int main() {
string str = "HelloWorld";
_______________________
cout << str;
return 0;
}
想要得到字符串 world,下面程序横线处应该填入的是()
#include <iostream>
#include <string>
using namespace std;
int main() {
string str = "HelloC++";
_____________
_____________
return 0;
}
A.
str.insert(4, "World");
cout << str.substr(4, 4);
B.
cout << str.substr(5, 5);
C.
str.insert("World");
cout << str.substr(5, 5);
D.
str.insert(5, "World");
cout << str.substr(5, 5);
有 n 个正整数,假设一个正整数是美丽数字当且仅当该正整数是 9 的倍数但不是 8 的倍数。下面的程序是编写计算 n 个正整数中美丽数字的数量,横线处应该填入的是( )
for (int i = 1; i <= n; i++) {
cin >> a;
_______________________
cnt++;
}
2 判断题(每题 2 分,共 20 分)
判断题「√」表示正确,「×」表示错误
判断一个三角形是否成立的条件只有:任意两边长度之和大于第三条边的长度
这段程序进行的是判断一个从键盘输入的字符的 ASCII 是否是奇数,若是,输出 YES,否则,输出 NO
int main()
{
char x;
scanf("%c", &x);
int ASCII = (int)x;
cout << (x & 1 ? "YES" : "NO") << '\n';
return 0;
}
闰年的定义:
- 普通闰年:公历年份是 4 的倍数,且不是 100 的倍数的,为闰年(如 2004 年、2020 年等就是闰年)。
- 世纪闰年:公历年份是整百数的,必须是 400 的倍数才是闰年(如 1900 年不是闰年,2000 年是闰年)。
下面程序是判断是否是闰年的正确程序
cin >> n;
cout << ((n % 4 == 0 && n % 100 != 0) || (n % 400 == 0)) ? 1 : 0;
return 0;
C++语句 cout << (n % 15 == 0 ? "YES" : "NO"); 能够判断一个整数能否被 3 和 5 同时整除
有 $ n $ 个同学,从中抽取任意个人数来参加学校组织的大合唱,共有 $ 2^n $ 种方法
若将一个正整数化为二进制数,在此二进制数中,我们将数字 1 的个数是偶数的这类二进制数称为 A 类数,否则就称其为 B 类数。
例如:
- $ (13)_{10} = (1101)_2 $,其中 1 的个数为 3,则称此数为 B 类数;
- $ (10)_{10} = (1010)_2 $,其中 1 的个数为 2,称此数为 A 类数;
判断 $ (2025)_{10} $ 化为二进制后,1 的个数为偶数个,因此 2025 为 A 类数。
该段程序将 $ n $ 不停地除以 2,并输出此时的商和余数,直到 $ n = 0 $ 为止。
long long n;
cin >> n;
while(n != 0) {
cout << n/2 << ' ' << n%2 << '\n';
n /= 2;
}
两个 13 进制的数 A 和 B,在 10 进制下分别表示 10 和 11。$ (A + B){13} = (18){13} $,也就是说 13 进制数 A 加上 13 进制数 B,和是 13 进制数 18。
$ k $ 进制,逢 $ k $ 进第二位,$ k^2 $ 进百位,$ k^3 $ 进千位。
$ \text{CCF}(十九进制)= 21\text{AC}$(十三进制)(不区分大小写)
3 编程题(每题 25 分,共 50 分)
2025
C++时间 1 s内存 512 MB标准输入输出
小 A 有一个整数 x,他想找到最小的正整数 y 使得下式成立:
(x and y)+(x or y)=2025其中 and 表示二进制按位与运算,or 表示二进制按位或运算。如果不存在满足条件的 y,则输出 −1。
输入格式
一行,一个整数 x。
输出格式
一行,一个整数,若满足条件的 y 存在则输出 y,否则输出 −1。
样例
1025
1000
数据范围
对于所有测试点,保证 0≤x<2025。
(x and y)+(x or y)=2025其中:
- and 表示按位与运算,运算符为 &。
- or 表示按位或运算,运算符为 ∣。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB
判题结果
词频统计
C++时间 1 s内存 512 MB标准输入输出
在文本处理中,统计单词出现的频率是一个常见的任务。现在,给定 n 个单词,你需要找出其中出现次数最多的单词。在本题中,忽略单词中字母的大小写(即 Apple、apple、APPLE、aPPle 等均视为同一个单词)。
请你编写一个程序,输入 n 个单词,输出其中出现次数最多的单词。
输入格式
第一行,一个整数 n,表示单词的个数;
接下来 n 行,每行包含一个单词,单词由大小写英文字母组成。
输入保证,出现次数最多的单词只会有一个。
输出格式
输出一行,包含出现次数最多的单词(输出单词为小写形式)。
样例
6 Apple banana apple Orange banana apple
apple
数据范围
对于所有测试点,1≤n≤100,每个单词的长度不超过 30,且仅由大小写字母组成。
你的代码(C++)
提交后由评测机编译运行,结果见下方76 B / 64 KB