c++编程解决下列问题

某单位要从4位职工甲、乙、丙、丁中挑选2位职工去外地旅游,由于工作需要,选派时要考虑下列要求:
4甲、乙两人中去且仅去1人。
②乙和丁不能都去。
3若丙去,则丁必须去。
④若丁不去,则甲也不去。
问该单位派谁去符合要求?

#include <iostream>
using namespace std;


int main() {
    /*4甲、乙两人中去且仅去1人。
    乙和丁不能都去。
    若丙去,则丁必须去。
    若丁不去,则甲也不去。*/
    int a, b, c, d;
    for (a = 0; a <= 1; ++a) {
        for (b = 0; b <= 1; ++b) {
            for (c = 0; c <= 1; ++c) {
                for (d = 0; d <= 1; ++d) {
                    if ((c == 1 && d != 1)) {
                        continue;
                    }
                    if (d == 0 && a != 0) {
                        continue;
                    }
                    if ((a + b + c + d) == 2 && (a + b) == 1 && (b + d) < 2) {
                        cout << "去外地旅游的职工为:" << endl;
                        if (a == 1) cout << "甲" << endl;
                        if (b == 1) cout << "乙" << endl;
                        if (c == 1) cout << "丙" << endl;
                        if (d == 1) cout << "丁" << endl;
                    }

                }
            }
        }
    }    

    return 0;
}

img

可以考虑用栈解决。
将甲乙丙丁当成四个元素,首先甲入栈,然后把除了甲之外的其他元素一一入栈判断。
模拟过程:
甲入栈,乙入栈,开始判断:条件一不符,不采纳,将乙出栈。
丙入栈,条件三不符,丙去则丁必须去。将丙出栈。
丁入栈,符合所有条件,输出甲丁,丁随后出栈
甲已经和其他元素都匹配过一遍,将甲出栈。
乙入栈,丙入栈,不符第三条件,将丙弹出。
丁入栈,不符合第二个条件,将丁弹出。
乙在第一位情况下的情况都讨论完毕,将乙出栈。
将丙入栈,将丁入栈,符合所有条件,将丙丁输出,丁出栈。
丙在第一位的情况讨论完毕,丙出栈。
剩下丁一个元素,无需讨论。
运行结束,能去的两组人是甲丁和丙丁。