180
社区成员




某任务需要在A,B,C,D,E五人中物色人员去完成,但派人受限于下列条件:
1.若A去,则B去
2.D,E两人中必有人去
3.B,C中必有一人去,但只能去一人
4.C,D两个要么都去,要么都不去
5.若E去,则A,B去
问有几种派遣方式?用C语言编程来回答这个问题
输入格式:无
输出格式:以A,B,C,D,E代表没人,输出满足问题要求的所有派遣组合,每行一个派遣。
例:1 : C D
2 : A B E
#include<stdio.h>
int main()
{
int arr[5] = { 0 };
int a,b,c,d,e,x=1;
for (a= 0; a < 2; a++)
{
arr[4] = a;
for (b = 0; b < 2; b++)
{
arr[3] = b;
for (c = 0; c< 2; c++)
{
arr[2] = c;
for (d= 0; d< 2; d++)
{
arr[1] = d;
for (e = 0; e < 2; e++)
{
arr[0] = e;
//这边使用了多个嵌套for循环来罗列每一个人去不去的情况
int flag = 0;
//条件1
if ((arr[0] == 1 && arr[1] == 1)||(arr[0]==0))
{
flag++;
}
//条件2
if (arr[3] == 1 || arr[4] == 1)
{
flag++;
}
//条件3
if ((arr[1] == 1 && arr[2] == 0 )|| (arr[2] == 1 && arr[1] == 0 ))
{
flag++;
}
//条件4
if ((arr[2] == 1 && arr[3] == 1 )|| (arr[2] == 0 && arr[3] == 0))
{
flag++;
}
//条件5
if (arr[4] == 1 )
{
if(arr[0] == 1&& arr[1] == 1){
flag++;
}
}else flag++;
if (flag == 5)//满足以上全部条件
{
printf("%d :",x);
x=x+1;
for (int i = 0; i < 5; i++)
{
if (arr[i] == 1)
{
if (i == 0)
printf(" A");
}
if (arr[i] == 1)
{
if (i == 1)
printf(" B");
}
if (arr[i] == 1)
{
if (i == 2)
printf(" C");
}
if (arr[i] == 1)
{
if (i == 3)
printf(" D");
}
if (arr[i] == 1)
{
if (i == 4)
printf(" E");
}
}printf("\n");
}
}
}
}
}
}
}
本题中运用了逻辑运算的思想;
通过数组的帮助实现找出满足条件的方法,我不知道会不会高效,但是还挺好理解。
这题还可以多考虑一下如何优化代码哦