CCF编程能力等级认证GESP—C++3级—20240907
- 单选题(每题 2 分,共 30 分)
- 判断题(每题 2 分,共 20 分)
- 编程题 (每题 25 分,共 50 分)
- 平衡序列
- 回文拼接
单选题(每题 2 分,共 30 分)
1、下列代码中,输出结果是( )
#include<iostream>
using namespace std;
int main()
{double a=0.9;double b=1.0;if(((b-a)==0.1)){cout<<"Equal"<<endl;}else{cout<<"Not equal"<<endl;}
}
A. Equal
B. Not equal
C. 程序不能正确执行
D. 没有输出
正确答案:B
2、关于计算机中的编码,下列说法中正确的是()
A. 机器数的形式值和真值是一致的
B. 原码就是符号位加上真值
C. 机器数是带符号的
D. [-1]=[1000 0001]原=[1111 1111]反
正确答案:C
3、8进制数3703转换成16进制数是()
A. 7C3
B. 7A3
C. 7B3
D. 7D3
正确答案:A
4、0.8125变成二进制是( )。
A. 0.1110
B. 0.1 1111 1011 1101
C. 0.1 1111 1011 1100
D. 0.1101
正确答案:D
5、下面说法正确的是( )
A. (22&01)==(22&&01)成立
B. (23|11)==30
C. (23|10)==31
D. (23|01)==31
正确答案:C
6、下列说法正确的是()
A. 2>>1和1>>1的值是一样的
B. (2>>2)和(1>>1)的值是一样的
C. (11^00)和(1^0)的值是一样的
D. (~0的输出值是1)
正确答案:B
7、下列代码实现的是( )
void Swap(int &a, int &b) {if (a != b) {a ^= b;b ^= a;a ^= b;}
}
A. a和b的异或
B. a和b的同或
C. a和b的值交换
D. a和b的高低位互换
正确答案:C
8、a&~1运算实现的是( )。
A. 使a的最低位为1
B. 使a的最高位为1
C. 使a的最低位为0
D. 使a的最高位为0
正确答案:C
9、a=1010 1110,a<<2,下面关于这个说法正确的是 ( )。
A. a的值变为1011 1000
B. a的值变为1011 1010
C. a的值变为0101 1101
D. a的值变为0101 1100
正确答案:A
10、下列程序中,result和result2输出分别是 ( )
long a = 123;
intb=1;
longresult=a&b;
cout<<result<<endl;long a2 = -123;
unsigned int b2 = -1;
long result2 = a2 & b2;
cout<<result2<<endl;
A. 123 -1
B. 123 -123
C. 1 -1
D. 1 -123
正确答案:D
11、陈A歹种植一批农作物,第一天需要浇水一次,随后的两天(第2、第3天),每天需要浇水2次,再随后的3天(第4、第5、第6天),需要每天浇水3次,这样持续下去,随后的n天,每天需要浇水n次。请问在100天里,总共浇了多少次水( )
A. 994
B. 996
C. 995
D. 945
正确答案:D
12、关于一维数组,下列程序能够正确执行的是( )。
A
int a[10];
int sum = 0;
for(int i = 0; i <= 10; i++) {sum = sum + a[i];
}
B
int a[10]={1,2,3,4,5,6,7,8,9,10};
int sum = 0;
for(int i=0;i<=10;i++) {sum=sum+a[i];
}
C
int a[10]={1,2,3,4,5,6,7,8,9,10};
int sum=0;
for(int i=0;i<10;i++) {um=sum+a[i];
}
D
int a[10]={0};
int sum=0;
for(int i=0;i<=10;i++) {sum=sum+a[i];
}
正确答案:C
13、下面的程序中,会输出( )。
int a[10]={1,2,3,4,5,6,7,8,9,10};
cout<<a[10]<<endl;
A. 1
B. 0
C. 10
D. 不确定的值
正确答案:D
14、有ABCD4个人,其中一个是小偷,每个人说一句话,只有小偷说的是假话,其中A说:不是我。B说:是 C。C说:是D。D说:C瞎说,请问谁是小偷( )。
A. A
B. B
C. C
D. D
正确答案:C
15、下列程序输出的是()
string str = "Hello,陈A歹";
cout << str.find("A") << '\n';
A. 9
B. 8
C. 7
D. 6
正确答案:B
判断题(每题 2 分,共 20 分)
1、+1和-1的原码进行1+(-1)计算的结果是-2 。( )
正确答案:正确
2、~1的输出值是-2。( )
正确答案:正确
3、~1 = 1111 1110。( )
正确答案:正确
4、取X的低四位,可以用Y = 0000 1111,用X&Y获取X的低四位。( )
正确答案:正确
5、下列程序输出的是A。( )
char x=65;
x++;
cout<<x++<<endl;
正确答案:错误
6、下列程序输出的是3。( )
string str="陈ADai";
size_t pos = str.find('D');
cout<<pos<<endl;
正确答案:正确
7、下列程序将输出1。( )
int a[10]={1};
cout<<a[1]<<endl;
正确答案:错误
8、下列程序将输出A。( )
int a=65;
cout<<(char)a<<endl;
正确答案:正确
9、16进制数 AB ,表示成2进制数是 10101011 。( )
正确答案:正确
10、def (十六进制) = 103231 (五进制)。( )
正确答案:错误
编程题 (每题 25 分,共 50 分)
平衡序列
【问题描述】
小杨有一个包含n个正整数的序列a,他认为一个序列是平衡的当且仅当存在一个正整数 i ( 1 < = i < n ) i(1<=i<n) i(1<=i<n)使得序列第1个到第i个数字的总和等于第i+1个到第n个数字的总和。
小杨想请你判断序列a是否是平衡的。
【输入描述】
第一行包含一个正整数t,代表测试用例组数。
接下来是t组测试用例。对于每组测试用例,一共两行。
第一行包含一个正整数n,代表序列长度。
第二行包含n个正整数,代表序列a。
【输出描述】
对于每组测试用例,如果序列a是否是平衡的,输出 Yes,否则输出 No。
【样例输入 1】
3
3
1 2 3
4
2 3 1 4
5
1 2 3 4 5
【样例输出 1】
Yes
Yes
No
对于第一组测试用例,令i = 2 ,则有1 + 2 = 3,因此序列是平衡的;
对于第二组测试用例,令i = 2 ,则有2 + 3 = 1 + 4,因此序列是平衡的;
对于第三组测试用例,不存在满足要求的i。
对于全部数据,保证有 1 < = t < = 100 , 1 < = n , a i < = 10000 1 <= t <= 100, 1 <= n, a_i <= 10000 1<=t<=100,1<=n,ai<=10000。
回文拼接
【问题描述】
一个字符串是回文串,当且仅当该字符串从前往后读和从后往前读是一样的,例如,a abaa 和ccddcc都是回文串,但abcd不是。
小杨有n个仅包含小写字母的字符串,他想请你编写程序判断每个字符串是否由两个长度至少为2的回文串前后拼 接而成。
【输入描述】
第一行包含一个正整数n,代表字符串数量。
之后n行每行一个仅包含小写字母的字符串。
【输出描述】
对于每个字符串输出一行,如果该字符串由两个长度至少为2的回文串前后拼接而成则输出 Yes,否则输出 No。
【样例输入 1】
4
abcd
aabbb
aaac
abcdd
【样例输出 1】
No
Yes
No
No
对于第1,3,4个字符串,都不是由两个长度至少为2的回文串前后拼接而成。
第2个字符串由回文串aa和bbb前后拼接而成,并且两个回文串长度都至少为2。
对于全部数据,保证有 1 < = n < = 10 1 <= n <= 10 1<=n<=10 ,并且每个字符串的长度不超过100。