DOTCPP:有关1125心得

题目描述

某侦察队接到一项紧急任务,要求在A、B、C、D、E、F六个队员中尽可能多地挑若干人,但有以下限制条件:

1)A和B两人中至少去一人;

2)A和D不能一起去;

3)A、E和F三人中要派两人去;

4)B和C都去或都不去;

5)C和D两人中去一个;

6)若D不去,则E也不去。

问应当让哪几个人去?

输入

输出

要派出的人

若有多个,按字母递增顺序排列,用逗号分开(含末尾逗号)

思路

每个人的状态为0(不去)或1(去)
则根据六个条件可得:

1、

  • A = 1, B = 1
  • A = 1, B = 0
  • A = 0, B = 1

2、

  • A = 1, D = 0
  • A = 0, D = 1
  • A = 0, D = 0

3、

  • A = 1, E = 1, F = 0
  • A = 1, E = 0, F = 1
  • A = 0, E = 1, F = 1

4、

  • B = 1, C = 1
  • B = 0, C = 0

5、

  • C = 1, D = 0
  • C = 0, D = 1

6、

  • D = 1, E = 1
  • D = 1, E = 0
  • D = 0, E = 0

因为要遍历A,B,C,D,E,F的两种状态,所以采用循环的形式
设置num作为当前遍历过的状态中去的人数最多的情况,并记录下当时A,B,C,D,E,F的状态

代码

#include<stdio.h>
int main()
{
 int A = 0, B = 0, C = 0, D = 0, E = 0, F = 0;
 int a, b, c, d, e, f;
 int num = 0;
 for(a = 0; a < 2; a++)
 {
  for(b = 0; b < 2; b++)
  {
   for(c = 0; c < 2; c++)
   {
    for(d = 0; d < 2; d++)
    {
     for(e = 0; e < 2; e++)
     {
      for(f = 0; f < 2; f++)
      {
       if(((a == 1 && b == 1) || (a == 1 && b == 0) || (a == 0 && b == 1)) && 
        ((a == 1 && d == 0) || (a == 0 && d == 1) || (a == 0 && d == 0)) &&
        ((a == 1 && e == 1 && f == 0) || (a == 1 && e == 0 && f == 1) || (a == 0 && e == 1 && f == 1)) &&
        ((b == 1 && c == 1) || (b == 0 && c == 0)) &&
        ((c == 1 && d == 0) || (c == 0 && d == 1)) &&
        ((d == 1 && e == 0) || (d == 1 && e == 1) || (d == 0 && e == 0)))
       {
        if(num < (a + b + c + d + e + f))
        {
         num = a + b + c + d + e + f;
         A = a, B = b, C = c, D = d, E = e, F = f;
        }
       }
      }
     }
    }
   }
  }
 }
 if(A == 1)
  printf("A ");
 if(B == 1)
  printf("B ");
 if(C == 1)
  printf("C ");
 if(D == 1)
  printf("D ");
 if(E == 1)
  printf("E ");
 if(F == 1)
  printf("F");
 return 0; 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值