设为首页 加入收藏

TOP

C语言委派任务问题代码及解析
2019-01-25 14:09:19 】 浏览:122
Tags:语言 委派 任务 问题 代码 解析

问题描述


某项任务需要在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也不去。

试编程求出应该让哪几个人去完成这项任务。


问题分析


先将问题描述中的限定条件转换成表达式。假设用A、B、C、D、E、F这6个变量来表示6个人,如果某个人被选定去完成任务则对应的变量值为1,否则,如果某个人未被选中参加该项任务,则其对应的变量值为0。由此,将限定条件转换为如下表达式:


算法设计


求解逻辑推理类问题的关键就是写出正确的逻辑表达式。由于C语言中提供了丰富的算术和逻辑操作符,因此可以借助它们有效地将问题化繁为简。将求解问题中的限定条件用程序语言描述清楚后就可以使用穷举法来获得最终的判断结果。对此类问题的求解,都可以依据这种思考方法来进行。

下面使用C语言中的逻辑表达式将问题分析中得到的6个条件表达出来,这6个表达式之间是“与”的关系。

逻辑表达式如下:


A+B>=1 && A+D!=2 && A+E+F==2 && (B+C==0 || B+C==2) && C+D==1 && (D+E==0 || D==1)


在程序中穷举每个人去或者不去的各种可能情况,并代入上面的逻辑表达式中进行推理运算,能使该逻辑表达式的值为真的结果就是正确的结果。

下面是完整的程序代码:


#include <stdio.h>

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==0 || D==1))
                            {
                                printf("A%s被选择去完成任务。\n",A?"":"未");
                                printf("B%s被选择去完成任务。\n",B?"":"未");
                                printf("C%s被选择去完成任务。\n",C?"":"未");
                                printf("D%s被选择去完成任务。\n",D?"":"未");
                                printf("E%s被选择去完成任务。\n",E?"":"未");
                                printf("F%s被选择去完成任务。\n",F?"":"未");
                             
                            }
 
    return 0;
}


运行结果:
A被选择去完成任务。
B被选择去完成任务。
C被选择去完成任务。
D未被选择去完成任务。
E未被选择去完成任务。
F被选择去完成任务。


C语言委派任务问题代码及解析


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇详细分析@Autowired注解与@resour.. 下一篇C语言谁是窃贼问题代码及解析

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目