学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年CSP-J初赛真题解析 | 汇总_csp历年真题_热爱编程的通信人的博客-CSDN博客
#include <iostream>
using namespace std;
const int MAXN = 1000000;
int F[MAXN];
int main() {
int n;
cin >> n;
int i = 0, p = 0, c = 0; //i是人的编号,c是已出队的人数,p表示当前要报的数
while (①) {
if (F[i] == 0) { //表示i在队中
if (②) { //报了1
F[i] = 1; //i出队
③;
}
④;
}
⑤;
}
int ans = -1;
for (i=0; i<n; i++)
if (F[i] == 0) //编号为i这个人在队中
ans = i;
cout << ans << endl;
return 0;
}
34、①处应填( )
A.i<n
B.c<n
C.i<n-1
D.c<n-1
【答案】:D
【解析】
题目要求只剩1个人为止,反过来说就是还剩大于1个人就继续循环。所以若作为出队人数的c小于n-1人,就继续循环。选D
35、②处应填( )
扫描二维码关注公众号,回复:
16512516 查看本文章
A.i % 2 == 0
B.i % 2 == 1
C.p
D.!p
【答案】:C
【解析】
报了1这个数就要出队,而p表示当前要报的数,所以选C
36、③处应填( )
A.i++
B.i = (i + 1) % n
C.c++
D.p ^= 1
【答案】:C
【解析】
上一行表示出队,所以这里应该是出队人数+1,所以选C
37、④处应填( )
A.i++
B.i = (i + 1) % n
C.c++
D.p ^= 1
【答案】:D
【解析】
报完数后应该就是要处理下一个要报的数,只有D选项是对p(要报的数)进行操作。1^1=0,0^1=1,选D
38、⑤处应填( )
A.i++
B.i = (i + 1) % n
C.c++
D.p ^= 1
【答案】:B
【解析】
这个是要处理下一个要报数的人i,i走到n-1后,再加1需要通过mod运算变为0。所以选B