CSP-J组初赛历年真题讲解第1篇

一、二进制基础

1.二进制数 00100100 和 00010100 的和是( )。

A.00101000
B.01100111
C.01000100
D.00111000

来源:模拟试题
正确答案:D

讲解:

CSP-J组初赛历年真题讲解第1篇_第1张图片

2.在二进制下,1011001+()=11001101011001+(     )=1100110

A. 1011
B. 1101
C. 1010
D. 1111

来源:模拟试题

正确答案:B

讲解:

CSP-J组初赛历年真题讲解第1篇_第2张图片

3.二进制数 1011 转换成十进制数是(     )。

A. 11
B. 10
C. 13
D. 12

来源:2020CSP普及组 单项选择题 第九题

正确答案:A

讲解:1×23+1×21+1×20=8+2+1=111×23+1×21+1×20=8+2+1=11,也就是。

CSP-J组初赛历年真题讲解第1篇_第3张图片 

4.在 8 位二进制补码中,10101011 表示的数是十进制下的(     ).

A. 43
B. -43
C. -85
D. -84

来源:2017NOIP普及组 单项选择题 第一题

正确答案:C

讲解:因为10101011符号位为1,所以是负数,负数的补码等于逐位取反后+1。还原过程:首先10101011–1=1010101010101011–1=10101010,再逐位取反得11010101,二进制转十进制−(1×26+1×24+1×22+1×20)=−85−(1×26+1×24+1×22+1×20)=−85。

5.二进制数 11.01 在十进制下是(     ).

A. 3.25
B. 4.125
C. 6.25
D. 11.125

来源:2013NOIP普及组 单项选择题 第二题

正确答案:A

讲解: (11.01)2=1×21+1×20+1×2−2=2+1+0.25=3.25(11.01)2​=1×21+1×20+1×2−2=2+1+0.25=3.25。

CSP-J组初赛历年真题讲解第1篇_第4张图片 

二、进制的基本概念与进制转换

1.

CSP-J组初赛历年真题讲解第1篇_第5张图片

来源:2010NOIP普及组 单项选择题 第十三题

正确答案:B

讲解:思考十进制转二进制除二取余的方法发现自然数x在二进制下的位数为log22向下取整。十进制n位自然数大于等于10”,小于10"+1,取对数lg210”,log210n+1)化简得(n * log210,(n + 1) * log210),可知与B最接近。

三、程序阅读

1.

代码:

1 	#include 
2 	using namespace std;
3 
4 	long long n, ans;
5 	int k, len;
6 	long long d[1000000];
7 
8 	int main() {
9 	  cin >> n >> k;
10	  d[0] = 0;
11	  len= 1;
12	  ans = 0;
13	  for (long long i = 0; i 

假设输入的 n 是不超过22的正整数,都是不超过10000 的正整数,完成下面的判断题和单选题。

题目:

·判断题
1)若k=1,则输出ans 时,len =n。( )
2)若k>1,则输出ans 时,len 一定小于n。( 
3)若k>1,则输出 ans 时,en一定大于n。( )
·单选题
4)若输入的 n 等于 : 1015,输入的为 1,则输出等于( )。
5)若输入的n 等于205,891,132,094,649( 即 330 ),输入的为3,则输出等于( )。
6)若输人的n 等于 100,010,002,000,090,输入的为10,则输出等于( )。

CSP-J组初赛历年真题讲解第1篇_第6张图片

 

来源:2020CSP普及组 阅读程序题 第十七题

正确答案:B,B,A,D,B,D

讲解:

n只决定外层for循环的次数。只要数组某位达到人,就向前进位。相当于是在人进制下从1数到n。
len记录有效位数,进位时ans加一,因此ans统计的是进位总次数。


1.不存在1进制,那k为1时相当于做了什么呢 ?
第1轮,d变为(1》,内层for循环不工作,后面的if导致进位,d变成0,1》len为2第2轮,d变成(1,1,内层for循环启动,d变成0,2),后面的不成立,不发生进位。之后每轮都像第2轮一样不会发生进位,n轮后,d变为(0.nlen依然为2,第一问是错误的。


2.出现“一定"之类的说法,尝试举反例即可。最简单的,k = 2n =1len要小于n那就得是0,怎么可能!len初始值都是1呢,所以这一问是错误的。


3,设k=2事实上k得几都一样,只不过二进制比较熟悉。2n就是二进制下的1后面len个0,这是个len +1位数。但len表示的是n在2进制下是几位数,即n是len位数。2/en比n从位数上都要多一位,显然是更大的。这一问是正确的。


4.类似第一问,人得1时会发生什么?经过n轮,d会变成0,,每轮发生1次进位,所以ans最终就得n,这一问选D.1015

5.道接算330肯定不现实,可以先算算31,323.....下列所有数组均为三进制1,2,10(3): 截至目前进位1次
11,12,20,21,22,100(3): 截至目前进位4次
101,102,110,111,112,120,121,122,200,201,202,210,211,212.220,221,222,1000 : 我至目前讲位13次结合4个选项,只有B符合目前的结果即3”会得(3”-1)/2,所以选B。


6.我的天,这么大的n,怎么算? 别慌,咱们试着拆解其实我们只需要计算1到100,000,000,000,000的进位次数,加上1到10,000,000,000的次数,加上1到2,000,000的,再加1到90的。总和就是1到这个大数的进位总次数。再来数学归纳:1到10共讲位1次,1到100共进位11次,1到1000共进位111次,所以1到10”共进位m个1次1100,000,000,000,000 : 11,111,111,111,111到10,000,000,000 : 1,111,111.111
1到2,000,000: 222,222
1到90 :9
总计:11,112,222444,453,因此选D。


好了,本期题目就到这里!

期待下1篇呦!

你可能感兴趣的:(C++,csp-J组初赛历年真题讲解,c++)