大家来看看有没有更好的算法
/*
2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。
*/
#include <iostream.h>
void main()
{
int A,B,C,D,E;//分别代表5个人,0表示未参加,1表示参加
for(A=0;A <=1;A++)
for(B=0;B <=1;B++)
{
if(A==1&&B==0)//对应 "A参加时,B也参加 "的否命题
continue;
for(C=0;C <=1;C++)
{
if(B==1&&C==1||B==0&&C==0)//对应 "B和C只有一个人参加 "的否命题
continue;
for(D=0;D <=1;D++)
{
if(C==0&&D==1||C==1&&D==0)//对应 "C和D或者都参加,或者都不参加 "的否命题
continue;
for(E=0;E <=1;E++)
{
if(D==0&&E==0)//对应 "D和E中至少有一个人参加 "的否命题
continue;
if(E==1&&A==0||D==0)//对应 "如果E参加,那么A和D也都参加 "的否命题
continue;
cout < <A < <B < <C < <D < <E < <endl;
}
}
}
}
}
[解决办法]
用stl的next_permutation
[解决办法]
感觉这类命题如果不用程序,人为推算,结果好象就那么多
如:如果A参加,则必然
A-》B-》D-》E
另外效率也没什么好追求的