212
社区成员
发帖
与我相关
我的任务
分享
题目要求:
思路讲解:
基本准则:枚举;假设某人去了则使某人等于1,不去则=0(若A去则A=1不去则A=0)。
将题目思路转换为数据表达:
(1)若A去,则B跟去:
三种情况:
1.A去B也去 A=1,B=1,A+B==2
2.A不去B去 A=0,B=1,A+B==1
3.AB都不去 A=0,B=0,A+B==0
综上:A-B != 0
(2)D、E两人中必有人去:
三种情况:
1.DE都去 D=1,E=1,D+E==2
2.D去E不去 D=1,E=0,D+E==1
3.D不去E去 D=0,E=1,D+E==1
综上:D+E != 1
(3)B、C两人中必有人去,但只去一人:
两种情况:
1.B去E不去 B=1,E=0,B+C==1
2.B不去E去 B=0,E=1,B+E==1
综上:B+E == 1
(4)C、D两个要么都去要么都不去:
两种情况:
1.CD都去 C=1,D=1,C+D==2
2.CD都不去 C=0,D=0,C+D==0
综上:D+C == 0 或 D+C == 2
(5)若E去,则A、B都去:
两种情况:
1.E、A、B都去 E=1,A=1,B=1,E+A+B==3
2.E不去,AB随意:E=0
综上:E+A+B ==3 或 E==0
若同时满足上述所有条件则说明方案可行
代码:
#include <stdio.h>
int main()
{
int a,b,c,d,e;
int cnt=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++){
if ( ((a-b)!=1) && ((d+e)!=0) && (b+c==1) && ((c+d==0)|| c+d==2) && ( (e+a+b==3)|| (e==0) ) ){
printf("%d :",++cnt); //输出方案序号
if (a) printf(" A"); // 若a==1则输出A
if (b) printf(" B");
if (c) printf(" C");
if (d) printf(" D");
if (e) printf(" E");
printf("\n");
}
}
}
}
}
}
return 0;
}
此方法运用到的知识较少相对来说比较方便理解
可以加上解题的思路分析、问题总结等