打卡5.8——委派认为问题
1.问题描述
某项任务需要在A、B、C、D、E、F这6个人中挑选人来完成,但挑选人受限于以下的条件:
(1) A和B两个人至少去一人;
(2) A和D不能同时去;
(3) A、E和F三人中要挑选两个人去;
(4) B和C同时去或者都不去;
(5) C和D两人中只能去一个;
(6) 如果D不去,那么E也不去。
试编程求出应该让哪几个人去完成这项任务。
2.问题分析
把六个条件转换成表达式,假设参加任务为1,不参加为0,那么这几个条件分别是
A+B>=1
A+D!=2
A+E+F==2
B+C==0||B+C=2
C+D==1
D+E==0||D++1
3.算法设计
穷举法算出所有的情况,然后用逻辑表达式作为判断条件,如果符合,输出结果
if (A + B >= 1 && A + D != 2 && A + E + F == 2 && (B + C == 0 || B + C == 2) && C + D == 1 && (D + E == 1 || D == 1))
输出结果会用到三目运算符,表达式格式为:<表达式1> ? <表达式2> : <表达式3>;
(1)计算表达式1的值;
(2) 若表达式1的值为真(或非0),则只计算表达式2,将其结果作为整个表达式的值;
若表达式1的值为假(或为0),则只计算表达式3,将其结果作为整个表达式的值。
就是这样
cout << "A " << (A ? "" : "不") << "去。" << endl;
4.完整程序
#include<iostream> using namespace std; int main() { int A, B, C, D, E, F;//下面是穷举法,穷举出所有可能的情况 for (A = 0; A <= 1; A++) { for (B = 0; B <= 1; B++) { for (C = 0; C <= 1; C++) { for (D = 0; D <= 1; D++) { for (E = 0; E <= 1; E++) { for (F = 0; F <= 1; F++) { if (A + B >= 1 && A + D != 2 && A + E + F == 2 && (B + C == 0 || B + C == 2) && C + D == 1 && (D + E == 1 || D == 1))//判断条件 { cout << "A " << (A ? "" : "不") << "去。" << endl; cout << "B " << (B ? "" : "不") << "去。" << endl; cout << "C " << (C ? "" : "不") << "去。" << endl; cout << "D " << (D ? "" : "不") << "去。" << endl; cout << "E " << (E ? "" : "不") << "去。" << endl; cout << "F " << (F ? "" : "不") << "去。" << endl; } } } } } } } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律