Description
**一,单项选择题(共15题,每题2分,共计30分:每题有且仅有一个正确选项)**
1. 如下关于C++编程语言中基础数据类型说法不正确的是()。
* double 类型的变量占用内存的大小是浮动的。
* bool 类型的变量占用 1 字节内存。
* int 类型变量的取值范围不是无限的。
* char 类型的变量有 256 种取值。
2. ()是一种解释型编程语言。
* C 语言
* C++
* Golang
* python
3. 以下程序执行完毕时变量x的值为()。

* 54321
* 543210
* 531
* 5309
4. 如下语句中等价于“ cout << a[5];”的语句为()。

* cout << a + 5;
* cout < s.size(),则程序输出一定为负整数 -1。()
* 正确
* 错误
29. 若字符串 p 中字符均不重复,则执行中 pmt 数组的值恒为 0。()
* 正确
* 错误
30. 对于任意合法输人,程序输出为大于等于 -1 且小于 s.size() 的整数数字。()
* 正确
* 错误
■选择题
31. 若程序输人 s 为 “abcdabceabcf” , p 为 “aaa” , 则程序输出为()。
* -1
* 0
* 4
* 8
32. 若程序输入 s 为 “abcdabceabcf” , p 为 “bcd” , 则程序输出为()。
* -1
* 0
* 1
* 9
33. 若输入 s 由 500 个字符 a 与 1 个字符 b 任意排列组成,输入 p 为连续的 200 个字符 a,则程序输出最大可能为()。
* -1
* 0
* 200
* 301
**三、完善程序(单选题,每小题3分,共计30分)**
(一) (求后序遍历)在二叉树的先序 ( 根左右 ) 、中序 ( 左根右 ) 、后序 ( 左右根 ) 遍历中,已知先序与中序就能唯一地确定二叉树的形态。
现对二叉树的每个节点给定一个唯一的字母字符编号,并已知其先序与中序遍历,计算并输出其对应后序遍历。
例如前序为ABDC,中序为DBAC时,程序输出后序应为DBCA。

34. (1)处应填()。
* p1 > ir
* pr < i1
* p1 ir
35. (2)处应填()。
* p1
* pr
* i1
* i
36. (3)处应填()。
* js = i
* js = i - 1
* js = pr - i
* js += 1
37. (4)处应填()。
* js
* root - i1 + 1
* root
* root - 1
38. (5)处应填()。
* 0, 1 - 1
* 1
* 0, 1
* 1 - 1, 0
(二) (石子合并)桌面上从左到右放着 n( 1 ≤ n ≤ 20 ) 堆石子,其中 i 堆石子包含的石子数量为b$_i$ ( 1 ≤ b$_i$ ≤ 20 )。现在要将石子有序地合并成一堆。
规定每次能取任意的两堆石子合并成新的一堆,并将新的一堆的石子数,记为该次合并的花费。那么,n - 1 次合并后,石子将合并成一堆。
你需要寻找一种合并方案,使得花费总和最小。输出最小的花费总和。
例如有 4 堆石子,每堆依次为 3、5、6、7。则首先合并第一堆和第二堆,花费为 3 + 5 = 8,剩余 3 堆石子依次为 8、6、7; 再合并当前第二堆和第三堆,花费为 6 + 7 = 13; 剩余两堆石子依次为 8 和 13; 最后合并两堆花费为 8 + 13 = 21。
总花费最小为 8 + 13 + 21 = 42,其他合并方案的花费均大于等于 42。

39. (1)处应填()。
* i
* 1 << i
* i + 1
* i * ( i + 1 ) / 2
40. (2)处应填()。
* a[0]
* i / 2
* n - i
* 1
41. (3)处应填()。
* i + j
* i - j
* j
* i
42. (4)处应填()。
* dp[i]
* dp[i]
* dp[i - j]
* dp[i] + dp[i-j]
43. (5)处应填()。
* i == 1
* i <= 3
* i % 2 == 0
* dp[i] == 1e9