9663 . 综合题 Puls

阅读程序2

#include <algorithm>
#include <cstdio>
#include <cstring>
#define ll long long
int cnt_broken = 0;
int cnt_check = 0;
int n, k;
inline bool check(int h) {
    printf("now check:%d\n", h);
    ++cnt_check;
    if (cnt_broken == 2) {
        printf("You have no egg!\n");
        return false;
    }
    if (h >= k) {
        ++cnt_broken;
        return true;
    } else {
        return false;
    }
}
inline bool assert_ans(int h) {
    if (h == k) {
        printf("You are Right using %d checks\n", cnt_check);
        return true;
    } else {
        printf("Wrong answer!\n");
        return false;
    }
}
inline void guess1(int n) {
    for (int i = 1; i <= n; ++i) {
        if (check(i));
        assert_ans(i);
        return;
    }
}
}
inline void guess2(int n) {
    int w = 0;
    for (w = 1; w * (w + 1) / 2 < n; ++w)
    ;
    for (int ti = w, nh = w; --ti, nh += ti, nh = std::min(nh, n)) {
        if (check(nh)) {
            for (int j = nh - ti + 1; j < nh; ++j) {
                if (check(j)) {
                    assert_ans(nh);
                    return;
                }
            }
            assert_ans(nh);
            return;
        }
    }
}
int main() {
    scanf("%d%d", & n, & k);
    int t;
    scanf("%d", & t);
    if (t == 1) {
        guess1(n);
    } else {
        guess2(n);
    }
    return 0;
}

(注意:下述的“猜测数”为调用check函数的次数(即cnt_check的值);“猜测正确“的含义为 assert_ans函数return true(执行第 25 行所在分支)的情况;所有输入保证 $1 ≤ k ≤ n$。)

22 . (判断题)

当输入为“6 5 1”时,猜测次数为5;当输入“6 5 2”时,猜测次数为 3。

23 . (判断题)

不管输入的n和k具体为多少,t=2时的猜测数总是小于等于t=1时的猜测数。

24 . (判断题)

不管 t=1或 t=2,程序都一定会猜到正确结果。

25 . (单选题)

函数 guess1在运行过程中,cnt_broken 的值最多为?

26 . (单选题)

函数 guess2在运行过程中,最多使用的猜测次数的量级为?

27 . (单选题)

当输入的n=100的时候,代码中t=1和t=2分别需要的猜测次数最多分别为?

上一题:阅读程序1
下一题:阅读程序3