CSP-J/S 第一轮备考
数制转换 · 位运算 · 计数原理
进制与编码 · 位运算技巧 · 排列组合与容斥
P03-P06 进制X 进制 · 按权展开 · 短除法 · 小数 · 二八十六互转 J/S共有
P07-P09 位运算与/或/异或/取反/移位 · 优先级 · 逻辑运算 J/S共有
P10 数论倍数/因数 · gcd/lcm · 欧几里得 J/S共有
P11-P12 计数加法/乘法 · 容斥 · 鸽巢 J/S共有
P13-P15 排列组合A/C · 捆绑/插空/插板 · 盒子小球 · Catalan J/S共有
P17-P19 限时练习进制位运算 · 计数原理 真题 J/S共有
试卷 硬件 编码 语言 系统
知识体系总览
页码知识点核心内容
P03进制基础X 进制定义、0-15 对照表、C++ 表示(0b/0/0x)
P04进制转换按权展开、短除法、小数转换、二/八/十六互转
P07位运算基础& | ^ ~ << >> 定义与真值表
P08位运算应用清零/置位/判奇偶/判相等/优先级/典型题
P09逻辑运算&& / || / ! 与数学符号 ∧ ∨ ﹁
P10数论基础倍数/因数、gcd/lcm、欧几里得、完全平方数例外
P11计数原理加法/乘法原理、幂、子集
P12容斥与鸽巢两/三集合容斥、多集合容斥、抽屉原理
P13排列组合排列数/组合数公式、组合数性质
P14计数技巧捆绑、插空、插板、盒子与小球
P15综合计数经典计数例题 + Catalan
P17-P19限时练习进制位运算、计数原理 真题练习
一句话主线:进制解决“怎么表示数”,位运算解决“怎么处理二进制细节”,计数原理解决“有多少种方案”。三者是初赛选择题、阅读程序、完善程序的高频考点。
[★] 备考要点:进制与位运算以“计算准确 + 优先级别踩坑”为主;计数原理以“识别模型 + 套公式 + 检验边界”为主。
进制基础 J/S共有
进位计数制:X 进制表示逢 X 进一位,X 称为基数
X 进制数位:每位用 0~X-1 计数;若 X>10,用字母 A…F 表示 10…15;超过 36 进制需人为规定更高符号。
记法:(a)_b 表示 b 进制下的 a。
例如:十进制数 (57)10 用二进制表示为 (111001)2,用五进制表示为 (212)5,用八进制表示为 (71)8,用十六进制表示为 (39)16,它们所代表的数值都一样。
十进制二进制八进制十六进制
0000
1111
21022
31133
410044
510155
611066
711177
81000108
91001119
10101012A
15111117F
三种常见进制与 C++ 表示
进制数码C++ 前缀
二进制(Binary)0、10b7 = 0b111
八进制(Octal)0~7012 = 014
十六进制(Hexadecimal)0-9、A-F0x15 = 0xF
二进制与逻辑天然相容:1 表示 true、0 表示 false;很多算法(如倍增)也与二进制有关。
八进制每位数对应 3 位二进制十六进制每位数对应 4 位二进制,常用来写一个字节(8 位 = 2 位十六进制)。
[?]【练习】下列哪个是合法的 C++ 十六进制整数?( )
A. 0x1G  B. 0b12  C. 0xFF  D. 008
答案:C
0xFF=255;A 中 G 非法;B 二进制不能含 2;D 中 008 是八进制但含 8 非法。
[★] 口诀:“逢 X 进 1;0~9 不够用 A~F;C++ 前缀 0b、0、0x 分别表示二、八、十六。”
任意进制 → 十进制 J/S共有
按权展开:X 进制的个位权重为 1,十位权重为 X,百位权重为 X²,从低向高数第 i 位权重为 X^(i-1)。
若 X 进制数为 a_n a_{n-1} … a_0,则
dec = a_0 + a_1·X + a_2·X² + … + a_n·X^n
例:(2413)5 = 3 + 1×5 + 4×25 + 2×125 = 3 + 5 + 100 + 250 = 358
练习题
[?]【练1】将 (10110)2 转换为十进制。
答案:22
16 + 4 + 2 = 22。
[?]【练2】将 (1423)6 转换为十进制。
答案:3 + 2×6 + 4×36 + 1×216 = 3+12+144+216 = 375
即 375。
[★] 口诀:“进十进制按权加;个位权 1、十位权 X、百位权 X²。”
十进制 → 任意进制 J/S共有
整数部分 —— 短除法:每次将当前数除以 X 取余数,然后该数除以 X 后向下取整,重复直到变为 0;把余数反着排列即为结果。
小数部分:不断将当前小数部分乘 X,其整数部分作为一位结果按顺序写在小数点后,继续处理新的小数部分,直到小数部分为 0;注意可能不会结束(十进制小数不一定能完全转换为 X 进制)。
// 短除法// 例:13(10) -> 2 进制 13 / 2 = 6 余 1 6 / 2 = 3 余 0 3 / 2 = 1 余 1 1 / 2 = 0 余 1 余数反排:1101(2)
小数的例子
1011.0101(2):= 1×2³+0×2²+1×2¹+1×2⁰ + 0×2⁻¹ + 1×2⁻² + 0×2⁻³ + 1×2⁻⁴ = 8+2+1+0.25+0.0625 = 11.3125
12.75(10)→2 进制:整数 12 = 1100,小数 0.75×2=1.5 取 1、0.5×2=1 取 1,得 1100.11
[?]【练3】将 55(10) 转为二进制。
答案:110111
短除法 55 → 110111(2)。
[?]【练4】将 124(10) 转为十六进制。
答案:7C
124 = 7×16 + 12(C) = 7C(16)。
[?]【练5】将 12.5(10) 转为八进制。
答案:14.4
整数 12 = 14(8),小数 0.5×8 = 4 → 14.4(8)。
[★] 口诀:“出十进制,整数除取余反排,小数乘取整顺排;小数不一定能转尽。”
二进制 ↔ 八 / 十六进制 J/S共有
二进制 → 十六进制:每 4 位一组(不足补 0),逐组转对应十六进制数。
二进制 → 八进制:每 3 位一组(不足补 0)。
例:十六进制 5A8 = 0101 1010 1000(2)。
利用“十进制作中转”,可实现任意两种进制互转。
// 快速转换 5 A 8 0101 1010 1000 5A8(16) = 010110101000(2) // 8 进制一位对应 3 位二进制,16 进制一位对应 4 位二进制
[?]【练6】将 0x5A8 转为二进制。
答案:0101 1010 1000
5→0101,A→1010,8→1000。
[!] 易错点:十六进制 A~F 转二进制须完整 4 位;八进制需完整 3 位,不足高位补 0。
[★] 口诀:“二转十六 4 位一组,二转八 3 位一组;16 一位=4 位二进制,8 一位=3 位二进制。”
位运算基础 J/S共有
程序中的所有数以二进制形式存储,位运算就是直接对整数在内存中的二进制位进行操作。
C++ 提供六种位运算符:&(按位与)、|(按位或)、^(按位异或)、~(按位非)、<<(左移)、>>(右移)
运算符名称规则示例
&按位与两个对应位均为 1 才为 110&13 = 1010&1101 = 1000 = 8
|按位或两个对应位均为 0 才为 010|13 = 1010|1101 = 1111 = 15
^按位异或两个对应位不同才为 110^13 = 1010^1101 = 0111 = 7
~按位非0→1,1→0(单目)~86 = ...1010 1001 = -87
<<左移a<3<<2 = 12
>>右移a>>b = a ÷ 2^b(向下取整)7>>2 = 1, 3>>1 = 1
&& 与 &:&& 是对 bool 的逻辑与,5&&7 = true&&true = 1;& 是位与。
|| 与 |:|| 是对 bool 的逻辑或,5||0 = true||false = 1。
异或可差分:a^b=c 可推出 c^a=b、c^b=a。
~x = -(x+1);if(~x) 与 if(x!=-1) 等价。
[?]【练习】表达式 10 ^ 13 的值是( )。
A. 8  B. 15  C. 7  D. 3
答案:C
1010 ^ 1101 = 0111(2) = 7。
[★] 口诀:“与全 1、或全 0、异或不同 1;取反加 1 取负;左移乘 2、右移除 2。”
位运算应用与优先级 J/S共有
按位与 & 的应用
• 将某些位变成 0 且保留其他位不变:n &= 0xffffff00 可将 int 型后 8 位清 0;
• 获取某一位:判断 n 的从低到高第 3 位是否为 1 用 n & 4
if(x&1) 等价于 if(x%2==1)
按位或 | 的应用
• 将某些位变成 1 且保留其他位不变:n |= 0x0000ffff 可将 int 型后 16 位变成 1。
异或 ^ 的应用
• a^b=c 可推出 c^a=b、c^b=a(可作简单加密/还原);
if(x^1) 等价于 if(x!=1);交换可用 a ^= b; b ^= a; a ^= b;
[!] 有符号右移:a>>b 中,若 a 为负数,C++ 为算术右移,符号位保留(如 10xxx 右移一位变 110xxx);无符号数右移高位补 0。
运算符优先级
// 优先级1. () [] -> . ++ -- 后缀/成员 2. ! ~ ++ -- - + * & 一元 3. * / % 乘法 4. + - 加法 5. << >> 位移 6. > >= < <= 关系/比较 7. == != 相等 8. & 按位与 9. ^ 按位异或 10. | 按位或 11. && 逻辑与 12. || 逻辑或 13. ?: 三目 14. = += -= *= /= %= <<= >>= &= |= ^= 复合赋值 15. , 逗号
本质:算术运算优先,其次位运算,最后逻辑运算;位运算非 ~ 的优先级很高;异或在与和或中间(>^>|)。
注意:7<<2|1 与 7<<2+1 的结果不相等(后者=7<<3=56,前者=28|1=29)。
[?]【练A】C++ 表达式 3&1|4^2 的值是( )。
A. 0  B. 3  C. 6  D. 7
答案:D
(3&1)|(4^2) = 1 | 6 = 7。
[?]【练B】C++ 表达式 7<<2|1 的值是( )。
A. 7  B. 13  C. 29  D. 56
答案:C
7<<2=28,再 |1 = 29。
[★] 口诀:“想提优先级先加括号;记 &>^>| 的次序:与高、异或中、或最低;位运算非 ~ 很高。”
逻辑运算 J/S共有
逻辑与:&&(数学中 ∧)。设 p、q 为逻辑表达式,p∧q 为真当且仅当 p、q 均为真。
逻辑或:||(数学中 ∨)。p∨q 为真当且仅当 p、q 中有一个为真。
逻辑非:!(数学中 ﹁)。﹁p 为真当且仅当 p 为假。
运算符C++数学符号真值
逻辑与&&全真才真
逻辑或||有真即真
逻辑非!真变假、假变真
[?]【练习】设 x=true、y=true、z=false,下列逻辑表达式值为真的是( )。
A. (y∨z)∧x  B. x∧(z∨y)∧z  C. (x∧y)∧z  D. (x∧y)∨(z∨x)
答案:A 与 D 均为真(部分题目只保留 A,练习以讲评为准)
A=(true∨false)∧true=true;D=(true∧true)∨(false∨true)=true∨true=true;B、C 因含 z=false 而为假。
[★] 口诀:“&& 全真才真,|| 有真即真,! 取反。逻辑运算只关心真假(0/1),位运算按位处理。”
简单数论:倍数与因数 J/S共有
如果 n = k·p(n、k、p 为正整数),则 n 是 p 的倍数,p 是 n 的因数,记作 p|n。
例:12 的因数有 1,2,3,4,6,12。
因数成对出现:12 = 1×12 = 2×6 = 3×4;但存在例外——完全平方数,如 25(5 只出现一次)。
因此求 n 的全部因数只需枚举到 sqrt(n)。
最大公因数与最小公倍数
gcd(a,b):最大公因数;lcm(a,b):最小公倍数。
性质:
• gcd(a,b) = gcd(b,a);
• 若 d|a 且 d|b,则 d|gcd(a,b);
• a×b = gcd(a,b) × lcm(a,b);
• gcd(a,b) = gcd(a, ka+b);取 k=-1 得 gcd(a,b)=gcd(a,b-a);取最小值得 gcd(a,b)=gcd(a, b mod a)。
欧几里得算法
// gcdint gcd(int a, int b) { return b ? gcd(b, a % b) : a; } // 一路相消,直到 b 因取模为 0,此时上层 a 即为最大公因数
[?]【练习】gcd(144, 24) = ( )。
A. 4  B. 6  C. 12  D. 24
答案:D
24 是 144 的因数,故 gcd=24。
[★] 口诀:“因数成对、完全平方数例外;gcd 辗转相除,lcm = a*b/gcd 先除后乘。”
基本计数原理 J/S共有
加法原理:完成一件事有 n 类方案,第 i 类方案数有 a_i 种,则总方案数 S = a_1+a_2+…+a_n。
例:小 A 附近有 a 家兰州拉面、b 家沙县小吃、c 家汉堡店,吃午饭方法 = a+b+c。
乘法原理:完成一件事有 n 个步骤,第 i 个步骤方案有 a_i 种,则总方案数 S = a_1×a_2×…×a_n。
例:汉堡店套餐从 a 种汉堡、b 种小食、c 种甜品、d 种饮料各选一款,搭配数 = a×b×c×d。
[?]【GESP 八级样题 T1】从 A 城到 C 城需经过 B 城:A→B 可选高铁/飞机,B→C 可自驾/打车,A→C 有( )种。
A. 2  B. 4  C. 8  D. 不知道
答案:B
2×2 = 4。
[?]【GESP 202312 八级 T1】小杨从 A 到 B:选项1 A→C(高铁)再 C→B(高铁/飞机);选项2 A→D(船)再 D→B(船/高铁/飞机)。共( )种。
A. 2  B. 3  C. 5  D. 6
答案:C
2 + 3 = 5(分类用加法)。
[?]【集合】有 n 个元素的集合,其不同子集个数为( )。
答案:2^n
每个元素可选/不选,共 2^n。
[★] 口诀:“分类用加、分步用乘;集合子集 2^n。”
容斥原理与鸽巢原理 J/S共有
两集合容斥:|A∪B| = |A| + |B| - |A∩B|。
例:28 人参加语文、29 人参加数学、12 人两科都参加,则至少参加一科 = 28+29-12 = 45 人。
三集合容斥:|A∪B∪C| = |A|+|B|+|C| - |A∩B|-|A∩C|-|B∩C| + |A∩B∩C|。
例:25 人语文、35 人数学、27 人编程;两两重合 12/8/9,三项重合 4,全班 = 25+35+27-12-8-9+4 = 62 人。
多集合容斥(CSP-J 不涉考):|∪A_i| = Σ(-1)^(k-1) Σ |A_i1∩A_i2∩…∩A_ik|。
鸽巢原理 / 抽屉原理
把 n 个物品划分到 k 组,则必然存在一组含有大于等于 ceil(n/k) 个物品。
例:15 个苹果放入 14 个篮子,必有一个篮子有 ≥2 个。
[?]【NOIP2018 普及组】10000 以内,与 10000 互质的正整数有( )个。
A. 2000  B. 4000  C. 6000  D. 8000
答案:B
10000 = 2^4 × 5^4,φ(10000) = 10000×(1-1/2)×(1-1/5) = 4000。
[?]【CSP-J 2019 T12】一副牌去掉大小王共 52 张(4 花色×13),随机抽取 13 张,则至少有( )张牌花色一致。
A. 4  B. 2  C. 3  D. 5
答案:A
按鸽巢:13 张放 4 个抽屉,至少 ceil(13/4)=4 张同花色。
[★] 口诀:“容斥:加单个、减两两、加三重;鸽巢:n 个物品 k 组,至少 ceil(n/k);与 10000 互质用欧拉函数。”
排列数 J/S共有
排列(有序):从 n 个不同元素中任取 m 个排成一列,排列数记为 A(n,m)。
公式:A(n,m) = n×(n-1)×…×(n-m+1) = n! / (n-m)!;n! = n×(n-1)×…×1。
例:5 个人选 3 人照相(甲乙丙、甲丙乙算不同)→ 5×4×3 = 60。
全排列:n 个元素排成一列 = n!。
组合数
组合(无序):从 n 个不同元素中任取 m 个组成集合,组合数记为 C(n,m)。
公式:C(n,m) = A(n,m)/m! = n! / (m!(n-m)!)
例:5 人选 3 人(不排序)= 60/6 = 10。
性质:C(n,m) = C(n,n-m);C(n+1,m) = C(n,m)+C(n,m-1)(用于递推;组合意义:选/不选 1 号物品)。
[?]【NOIP2017 普及组 T9】甲、乙、丙从 4 门课程中,甲选 2 门、乙丙各选 3 门,不同选修方案共( )种。
A. 36  B. 48  C. 96  D. 192
答案:C
C(4,2)×C(4,3)×C(4,3) = 6×4×4 = 96。
[?]【练习】从 6 人中选 3 人,甲、乙至少 1 人入选,共( )种。
A. 16  B. 20  C. 12  D. 14
答案:A
C(6,3)-C(4,3) = 20-4=16(间接法)。
[★] 口诀:“有序用 A、无序用 C;C(n,m)=C(n,n-m),C(n+1,m)=C(n,m)+C(n,m-1)。”
计数技巧:捆绑 / 插空 / 插板 J/S共有
捆绑法(必须相邻)
步骤:1) 将必须相邻的元素捆绑成一个整体,与其他元素排列;2) 被捆绑元素内部排列;3) 乘法原理相乘。
例(GESP202406):ABCDE 排一队,AB 必须相邻 → 捆绑 AB(A2,2=2),整体 4 件排列 A4,4=24,总 2×24=48。
插空法(必须不相邻)
步骤:1) 先将可相邻元素排好;2) 将不相邻元素插入空位;3) 相乘。
例:三盆红花与四盆黄花,红花互不相邻:四盆黄花 1 种排法形成 5 空位,C(5,3)=10 种。
插板法(相同物品分组)
本质:求方程 x1+x2+…+xn = k 的正整数解,方案数 C(k-1, n-1)。
非负整数解:C(n+k-1, k-1)。
例:7 个相同苹果分给 3 人,每人至少 1 个 = C(6,2)=15。
[?]【插空法 NOIP2016】1×8 方格黑白两色填涂,每个方格一色且不允许两个黑格相邻,共( )种。
A. 34  B. 55  C. 89  D. 144
答案:B
0 黑:1;1 黑:C(8,1)=8;2 黑:C(7,2)=21;3 黑:C(6,3)=20;4 黑:5;合计 55。
[?]【插板法 NOIP2017 提高 T9】7 个名额分给 4 个不同班级,允许有的班没有名额,共( )种。
A. 60  B. 84  C. 96  D. 120
答案:D
先借 4 个名额 → 11 个元素分 4 份(每份≥1)C(10,3)=120,再还回借的 4 个。
[★] 口诀:“相邻捆绑、不相邻插空;相同分堆用插板(正整数 C(k-1,n-1),非负 C(n+k-1,k-1))。”
综合计数:盒子与小球 + Catalan + 例题 J/S共有
盒子与小球问题(洛谷 P5824):n 个球放入 m 个盒子,全部放完。按“球相同/不同、盒子相同/不同、盒子限制(不限/最多1/最少1)”共 12 类。常见:
1. 盒子不同、球不同、无限制:m^n;
2. 盒子不同、球不同、每盒最多 1 个:A(m,n);
3. 盒子不同、球相同、每盒最多 1 个:C(m,n);
4. 盒子相同、球相同、每盒最多 1 个:n≤m 时 1 种;
5. 盒子不同、球相同、每盒最少 1 个:C(n-1,m-1);
6. 盒子不同、球相同、无限制:C(n+m-1,m-1)。
Catalan 数(认识即可)
H_n = C(2n,n)/(n+1) = C(2n,n) - C(2n,n-1)
对应:从 (0,0) 到 (n,n) 不碰 y=x 的路径数;n 个元素出栈序列数;n 个结点不同二叉树数;n 对括号合法序列数;圆上 2n 个点配对不相交线段数。
[?]【GESP 202406 八级】从 ABCDE 五人中选三人排一队升国旗,A 不能排首位,共( )种。
A. 24  B. 48  C. 32  D. 12
答案:B
首位从 BCDE 选 4 种,余下 4 个位置排 2 人 A(4,2)=12,总 4×12=48。
[?]【GESP 202406 八级】用 0,1,2,3,4,5 组成无重复数字的三位数,共( )个。
A. 180  B. 120  C. 80  D. 100
答案:D
百位不能为 0:5×5×4 = 100。
[?]【数字统计】用 0,1,2,3,4,5 组成无重复数字的五位奇数,共( )个。
答案:288
末位 3 种(1,3,5),首位 4 种,中间 A(4,3)=24,总 3×4×24=288。
[★] 口诀:“盒子小球先看球/盒是否相同、有无限制;Catalan 记 5 个经典背景;有限制先排受限位置。”
知识速查
进制逢 X 进 1 · 0b/0/0x · 按权展开 · 短除法
位运算&全1 |全0 ^异或 ~取反 <<乘2 >>除2
优先级& > ^ > | · 移位高于位或 · 算术优先位运算逻辑
数论因数成对 · 完全平方例外 · gcd 辗转相除 · lcm=a*b/gcd
计数分类用加 · 分步用乘 · 容斥加-减+ · 鸽巢 ceil(n/k)
排列有序 A(n,m)=n!/(n-m)!
组合无序 C(n,m)=n!/(m!(n-m)!) · C(n+1,m)=C(n,m)+C(n,m-1)
技巧捆绑 · 插空 · 插板 C(k-1,n-1)/C(n+k-1,k-1)
CatalanC(2n,n)/(n+1) · 出栈/括号/二叉树/路径
综合练习
[?]【综合1】二进制数 1101 转十进制是( )。
A. 13  B. 11  C. 14  D. 15
答案:A
8+4+1 = 13。
[?]【综合2】表达式 ~0 在 32 位 int 中等于( )。
A. 0  B. -1  C. 1  D. 65535
答案:B
~0 = 0xFFFFFFFF = -1(补码)。
[?]【综合3】把 4 本不同的书平均分成两堆(每堆 2 本),共( )种。
A. 3  B. 6  C. 12  D. 24
答案:A
C(4,2)/2! = 6/2 = 3。
[★] 备考建议:先吃透 0-15 进制对照与位运算真值表,再记牢计数公式(A/C、容斥、插板、卡特兰)。选择题与阅读程序题里“优先级别踩坑、补码范围、隔板边界”是高频陷阱。
限时练习:进制与位运算(单项选择 10 题,每题 5 分,共 50 分)
1. 数值 AH02 有可能是( )进制。A. 10 B. 16 C. 17 D. 18
2. 十进制数 156 转换为二进制后,将其每一位求和,得到的结果为( )。A. 2 B. 4 C. 6 D. 8
3. 八进制数 32.1 对应的十进制数是( )。A. 24.125 B. 24.250 C. 26.125 D. 26.250
4. 目前主流的计算机存储数据最终都要转换成( )数据进行储存。A. 二进制 B. 十进制 C. 八进制 D. 十六进制
5. 二进制数 101.11 对应的十进制数是( )。A. 6.5 B. 5.5 C. 5.75 D. 5.25
6. 设 x=true、y=true、z=false,以下逻辑运算表达式值为真的是( )。A. (y∨z)∧x B. x∧(z∨y)∧z C. (x∧y)∧z D. (x∧y)∨(z∨x)
7. 144 和 24 的最大公约数是( )。A. 4 B. 6 C. 12 D. 24
8. 二进制数 0111 0010 1010 1001 与( )相等。A. 十进制数 29354 B. 十六进制数 72A9 C. 八进制数 71249 D. 十六进制数 9A27
9. 二进制数 11 1011 1001 0111 和 01 0110 1110 1011 进行按位与运算的结果是( )。A. 01 0010 1000 0111 B. 01 0010 1001 0011 C. 01 0010 1000 0001 D. 01 0010 1000 0011
10. 与二进制小数 0.1 相等的八进制数是( )。A. 0.8 B. 0.4 C. 0.2 D. 0.1
[?]【选做核对】第 2 题:156 的二进制各位求和?
答案:B(4)
156 = 10011100(2),1+0+0+1+1+1+0+0 = 4。
[?]【选做核对】第 5 题:101.11(2) = ?
答案:C(5.75)
4+1+0.5+0.25 = 5.75。
[?]【选做核对】第 8 题:0111 0010 1010 1001 = ?
答案:B(十六进制 72A9)
7→0111、2→0010、A→1010、9→1001。
[★] 提示:这是 CS3 的“限时练习(单项选择部分)”,建议与阅读程序一并 30-40 分钟内完成。
限时练习:进制转换阅读程序(CS3 阅读程序)
给定程序:输入 X(2~10)与一个 X 进制(可能含小数)的数 num,将其转换为十进制输出。
// 阅读程序double f(string num) { double ans = 0; double div = X; for(int i = 0; i < num.length(); i++) { ans += (num[i] - '0') / div; div *= X; } return ans; } int g(string num) { int ans = 0; for(int i = 0; i < num.length(); i++) ans = ans * X + (num[i] - '0'); return ans; } int main(){ string num; cin >> num; int X; cin >> X; if(num.find('.') != num.npos){ string s1 = num.substr(0, num.find('.')); string s2 = num.substr(num.find('.') + 1); double ans = (double)g(s1) + f(s2); cout << fixed << setprecision(8) << ans << endl; } else { int ans = g(num); cout << ans << endl; } }
判断题:11. 该程序的作用是将输入的 X 进制小数或整数转换为十进制。( )
12. 若输入的 X > 10,该程序也能够计算出正确的结果。( )
13. 在第 32 行执行完毕后,逻辑表达式 s1 + s2 == num 为真。( )
选择题:14. 当输入为 “101.1 2” 时,输出为( )。A. 101.10000000 B. 5.50000000 C. 5 D. 0.50000000
15.(12 分)将第 32 行修改为( ),仍可获得相同的结果。A. string s2 = num - s1; B. s2 = num.substr(0, find+1); C. s2 = num.substr(find, len-find-1); D. s2 = num.substr(find+1, len-find-1)
16. 当输入为 “721 8” 时,与下列( )输入会得到相同的输出。A. 721.0 8 B. 425 10 C. 111010001 2 D. 1D1 16
[?]【核对14】“101.1 2” 输出?
答案:B(5.50000000)
101(2)=5,0.1(2)=0.5,合计 5.5。
[★] 提示:第 16 题可用“转换为十进制后的值相等”来核对(721(8)=465(10)=111010001(2)=1D1(16))。
限时练习:计数原理(CS4 随堂测验 选择题)
1. 某校食堂午餐提供 4 种荤菜、6 种素菜、3 种主食和 3 种汤,小洛各选 1 种,组合数?A. 16 B. 72 C. 128 D. 216
2. 3 位男孩和 3 位女孩站成一排,3 位女孩站在一起,站法数?A. 36 B. 72 C. 144 D. 192
3. 从 500 位小学生、300 位中学生中抽取 25+15 名体检,不同抽取数?A. C(500,25)×C(300,15) B. P(500,25)×P(300,15) C. P(500,25)×P(300,15) D. C(500,15)×C(300,25)
4. 晚上会安排 4 个歌舞节目和 2 个语言节目,语言类节目之间有且仅有 2 个歌舞节目?A. 64 B. 96 C. 128 D. 144
5. 一天课表排语文/数学/英语/物理/化学/生物六门,数学只能排在第一节或最后一节,物理和化学必须相邻,排法数?A. 96 B. 120 C. 144 D. 168
6. 6 名同学到甲、乙、丙三馆做志愿者,甲馆 1 名、乙馆 2 名、丙馆 3 名,不同安排?A. 20 B. 30 C. 60 D. 120
7. 用 1,2,3,4 组成无重复数字的四位数,其中比 2134 大的数有?A. 13 B. 15 C. 17 D. 19
8. 小洛想按某种排列得到密码 314159,要求 9 不在最后一位,不同密码数?A. 300 B. 360 C. 450 D. 600
9. 有多少个不同的偶数可以整除 30030?A. 8 B. 15 C. 32 D. 64
10. 从 1,2,…,100 任取 2 个数,使乘积能被 7 整除,取法数?A. 1024 B. 1204 C. 1295 D. 1386
11. 从 1,2,…,100 任取 2 个数,使乘积能被 4 整除,取法数?A. 300 B. 625 C. 875 D. 1225
12. A,B,C,D,E 五人站一排,若 B 必须在 A 的右边,排法数?A. 25 B. 30 C. 60 D. 120
13. 楼梯从地面到第 10 级,每步可走 2 或 3 级,共有( )种走法。A. 7 B. 8 C. 9 D. 10
14. 5 位同学重新坐位,要求有至多 2 位同学坐在自己原位置,不同坐法数?A. 44 B. 89 C. 109 D. 120
15. 字符串 abcab 有多少个内容互不相同的子串?A. 12 B. 13 C. 14 D. 15
[?]【核对1】4×6×3×3 = ?
答案:D(216)
乘法原理 4×6×3×3=216。
[?]【核对12】5 人排队,B 在 A 右边。
答案:C(60)
B 在 A 右与 A 在 B 右各占一半:5!/2 = 60。
[?]【核对13】到第 10 级台阶(走 2 或 3 级)。
答案:B(8)
递推 f(n)=f(n-2)+f(n-3),f(0)=1,算得 f(10)=8。
[★] 提示:这是 CS4 的“随堂测验”,建议 30 分钟内完成;答案可结合板书讲评核对。
100%