- C++
备战CSP-J初赛21天打卡计划。DAY4-DAY4-数据类型、存储单位、指针【答案和解析】
- 2024-9-3 22:10:18 @
存储单位
快问快答: 1、A
📜历年真题
1-5:CDADB
4题解析:
指针和引用
历年真题
1、D
📜历年真题 数据类型
程序阅读题第一题题目解析:
答案:A B B B B B
解析:输入的 x、y 均是不超过 15 的自然数,代表 x、y 的二进制表示不会超过4位。x、y 均会执行以下操作,以 x 为例:
x = (x | x << 2) & 0x33;
x = (x | x << 1) & 0x55;
假定 x 的二进制表示四位数为 abcd:
那么在执行完这两句程序后,x 的二进制表示变为:a0b0c0d。
16.答案:A。正确,short 为 2 字节 16 位,unsigned short 无符号位,有 16 个数字位;去掉 unsigned 后有符号位,仍有 15 个数字位,而最终结果最多只有 8 位,所以程序行为不变。
17.答案:B。错误,char为字符型,若程序输入“13 8”,则 x 为 '1', y 为 '3',程序行为改变。
18.答案:B。错误,通过上述分析及19、20题发现不可能总是输出0,或者可以先算19、20题,如果结果不为0,那么该题就是错误的。
19\20.答案:B。错误,输入“2 2”,二进制表示为0010,因此在执行9-12行后,x、y 的值变为0000100。通过下表计算知,z 的值为12。
21.答案:B。输入“13 8”,x 二进制表示为 1101,y 的二进制表示为 1000,因此在执行9-12行后,x 的值变为1010001,y 的值变为1000000。通过下表计算知,z的值为209。
程序阅读题第二题题目解析:
解析:solve1
函数 用二分算法,返回 nn的平方根的向下取整的结果。solve2
函数是牛顿迭代算法。
28.正确,solve1
中二分复杂度 O(logn),solve2
循环O(k)。k次,因此复杂度是O(logn+k)。
29.正确,solve1(9801)
返回99, solve2
循环1次,x=(99+99/1)/2=99,正确
30.错误,在数学中当趋近无限的时候,两者会相等返回1,但浮点类型精度有限,两者不会相等。
31.错误,题目说n是不超过 47000的自然数,当 nn 是47000时,mid=(0+47000)/2=23500*,mid的平方不会超过int
的最大值。
32.C,代入计算,solve(2) = 1
, ans=(1+2/1)/2=1.5
33.B,代入计算,solve(3) = 1
, solve2
中循环10次,第一次x=(1+3/1)/2=2 第二次 x=(2+3/2)/2=1.75, 第三次..... 此后的值是递减的,逐渐接近 n,所以可选项只有AB。又根据均值不等式 (a+b)/2>=a∗b ,因此 (x+n/x)/2>=n,所以solve2
返回值一定是 >= n , 因此最接近的应该是 1.732 而不是 1.7,选B
34.答案:A,256的平方根刚好是16,solve1(256)
= 16,solve2
中(16+256/16)/22 永远等于 16
程序阅读题第三题题目解析:
解析: 1.decoder数组覆盖0~25共26个下标,若为其他字符与‘A’相减,如‘a’−‘A’=97−65=32,则会越界。
2.如果输入均为重复的一串Z,则输入输出相同,选择decoder数组中与26字母表顺序位置一致的字母即可
3.该循环意图在encoder中寻找非0位置数量,只有0,1,2三个位置,因此改为i<3也可以
4.该循环意图根据encoder元素填写decoder从0~25这26个位置的元素,因此不可改为i<16.
5.decoder数组决定st输出结果,寻找decoder中ABC的位置分别为2、15、18,即计算st[i]−’A’=2∣∣15∣∣18,符合条件的st[i]分别为C、P、S
6.decoder数组决定st输出结果,寻找decoder中CSP的位置