测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A62777. 完善C++程序:精明与糊涂有N个人,分为两类:i)精明人:永远能正确判断其他人是精明还是糊涂;ii)糊涂人:判断不可靠,会给出随机的判断。已知精明人严格占据多数,即如果精明人有k个,则满足k > N/2。你只能通过函数 query(i,j)让第i个人判断第个人:返回true表示判断结果为“精明人”;返回false表示判断结果为“糊涂人”。目标是通过互相判断,找出至少一个百分之百能确定的精明…

编程题

题目描述

完善C++程序:精明与糊涂

有N个人,分为两类:

i)精明人:永远能正确判断其他人是精明还是糊涂;

ii)糊涂人:判断不可靠,会给出随机的判断。

已知精明人严格占据多数,即如果精明人有k个,则满足k > N/2。你只能通过函数 query(i,j)让第i个人判断第个人:返回true表示判断结果为“精明人”;返回false表示判断结果为“糊涂人”。目标是通过互相判断,找出至少一个百分之百能确定的精明人(无需关心 query(i,j)的内部实现)。

以下程序利用“精明人占多数”的优势,通过“消除”过程让人们互相判断并抵消,经过若干轮抵消后,最终留下的候选者必然属于多数派(精明人),试补全C++程序。

#include <iostream>
#include <vector>
using namespace std;
int N;
bool query(int i, int j);
int main(){
    cin >> N;
    int candidate = 0;
    int count = ①;
    for(int i=1; i<N; ++i){
        if(②){
            candidate = i;
            count = 1;
        }else{
           ③{
                ④;
        }else{
            count++;
            }
        }
    }
    cout << ⑤ << endl;
    return 0;
}