逻辑题:谁是卸载按钮——cpp代码

Posted hans774882968

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逻辑题:谁是卸载按钮——cpp代码相关的知识,希望对你有一定的参考价值。

这年头,小学数学没学好连卸载软件的资格都没有。

下面只有一个按钮说了真话。那么谁是卸载按钮?
A:是B!
B:是D!
C:不是我!
D:B撒谎!

在这里插入图片描述

非常常见的逻辑题了,小学3年级就开始见 。现在用代码来解决它。首先有2种实现思路,一种是枚举说真话的按钮,另一种是枚举卸载按钮(合理假设:卸载按钮有且只有1个)。前者貌似比后者难,因此我们枚举卸载按钮,并验证说真话的按钮个数是否等于1。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
#define rep(i,a,b) for(int i = (a);i <= (b);++i)
#define re_(i,a,b) for(int i = (a);i < (b);++i)
#define dwn(i,a,b) for(int i = (a);i >= (b);--i)

const int SZ = 1e3 + 3;

template<typename Type>inline void read(Type &xx){
    Type f = 1;char ch;xx = 0;
    for(ch = getchar();ch < '0' || ch > '9';ch = getchar()) if(ch == '-') f = -1;
    for(;ch >= '0' && ch <= '9';ch = getchar()) xx = xx * 10 + ch - '0';
    xx *= f;
}

//first=说真话的按钮,second=卸载按钮
pair<char,char> solve(){
    re_(i,0,3){
        int a[4] = {i == 1,i == 3,i != 2,i != 3};
        if(accumulate(a,a+4,0) == 1){
            return {max_element(a,a+4)-a+'A',i+'A'};
        }
    }
    return {'E','E'};
}

int main(int argc, char** argv) {
    pair<char,char> res = solve();
    cout << res.first << " " << res.second << endl;
    return 0;
}

结果:D说真话,C是卸载按钮。

以上是关于逻辑题:谁是卸载按钮——cpp代码的主要内容,如果未能解决你的问题,请参考以下文章

逻辑式编程语言极简实现(使用C#) - 2. 一道逻辑题:谁是凶手

逻辑训练题

c_cpp Atlas300代码片段

c_cpp Robolution基本代码片段

c_cpp 加载源图像固定用法(代码片段,不全)

温柔的陷阱——《谁是代码界3%的王者?》