委派任务问题

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;
}

 

posted @ 2023-05-05 20:41  酥饼馅红豆沙  阅读(21)  评论(0编辑  收藏  举报