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