c语言编码任务描述,C语言委派任务问题代码及解析

问题描述

某项任务需要在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。由此,将限定条件转换为如下表达式:

A+B>=1                  表示A和B两个人至少去一人。

A+D!=2                   表示A和D不能同时去。

A+E+F==2              表示A、E、F三人中要挑选两人去。

B+C==0||B+C==2   表示B和C同时去或都不去。

C+D==1                  表示C和D两人中只能去一个。

D+E==0||D==1        表示如果D不去,那么E也不去(如果D去了,那么E可以去也可以不去)。

算法设计

求解逻辑推理类问题的关键就是写出正确的逻辑表达式。由于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

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被选择去完成任务。

77fdc2e037067bef6d1a35125dea4911.png

0b1331709591d260c1c78e86d0c51c18.png

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值