2016普及组初赛题解
错题
阅读程序写结果 8.
原题:
#include <iostream>
using namespace std;
int main() {
int a[6] = {1, 2, 3, 4, 5, 6};
int pi = 0;
int pj = 5;
int t , i;
while (pi < pj) {
t = a[pi];
a[pi] = a[pj];
a[pj] = t;
pi++;
pj--;
}
for (i = 0; i < 6; i++)
cout << a[i] << ",";
cout << endl;
return 0;
}
输出:__________
正确答案:6,5,4,3,2,1,
错误答案:6,5,4,3,2,1
解析:这个很容易看出来是会输出什么,但是坑点是输出时每个数字后面都有逗号
易错题
选择题
原题:
与二进制小数0.1相等的八进制数是()。
A. 0.8 B. 0.4 C. 0.2 D. 0.1
正确答案:B
解析:n进制的数的第i位小数所代表的计数单位的大小是n^-i,二进制0.1对应的十进制是0.5,八进制是0.4,而非0.1
问题求解
1.
原题:
从一个4*4的棋盘(不可旋转)中选取不在同一行也不在同一列上的两个方格,共有______种选法
正确答案:72
解析:当我们选了一个方格后它所属的那行和那列就不能再选了,还剩下9个方格可选
可选:1
不可选:0
第一个方格:a
1 1 1 1 1 0 1 1
1 1 1 1 ————\ 1 0 1 1
1 1 1 1 ————/ 0 a 0 0
1 1 1 1 1 0 1 1
所以可以有9 * 16 = 144种选法,但是真的有这么简单吗。其实还要考虑重复的情况,两个方格是没有区别的。
没选:_
第一个选的方格:a
第二个选的方格:b
_ _ _ _ _ _ _ _
_ _ a _ _ _ b _
_ b _ _ == _ a _ _
_ _ _ _ _ _ _ _
其实图中的两种情况是没有区别的,所以总情况数应该是144 / 2 = 72
完善程序
2.
(1)
原题:
...
bool check(int nn){
int count = 0, i,j;
i = (1);
j = 1;
while(i <= n){
if( )
count += C[j] - M[i];
i ++;
j ++;
}
return (3) /*已知(3)是count <= a*/ ;
}
...
正确答案:n - nn + 1
解析:这个函数的功能是判断nn个人能不能都租到车
count是要旅游经费补贴的量
i是人的指针
j是车的指针
贪心的思路是让最有钱的nn个人去租最便宜的nn个车,再这nn个人中最穷的人去租最便宜的车
这样就可以保证如果这个方案不可行,一定没有其他可行方案。因为如果最有钱的nn个人都租不起,其他没那么有钱的人肯定也租不起。
因为人是按照带的钱数排序过的,所以选后nn个人的开始下标就是n - nn + 1
答案
.jpg)
tql