历年CSP-J初赛真题解析 | 2021年CSP-J初赛完善程序(34-38)

学习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

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/132759851