有人邀请A,B,C,D,E,F 6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:
1)A,B两人至少有1人参加会议;
2)A,E,F 3人中有2人参加会议;
3)B和C两人一致决定,要么两人都去,要么两人都不去;
4)A,D两人中只1人参加会议;
5)C,D两人中也只要1人参加会议;
6)如果D不去,那么E也决定不去。
那么最后究竟有哪几个人参加了会议呢?
方法一:暴力列举
package String;
public class Meeting_1 {
public static void main(String[] args) {
for(int a1=0;a1<=1;a1++){ //0表示不去,1表示去
for(int a2=0;a2<=1;a2++){
for(int a3=0;a3<=1;a3++){
for(int a4=0;a4<=1;a4++){
for(int a5=0;a5<=1;a5++){
for(int a6=0;a6<=1;a6++){
if(tem1(a1,a2,a3,a4,a5,a6)&&
tem2(a1,a2,a3,a4,a5,a6)&&
tem3(a1,a2,a3,a4,a5,a6)&&
tem4(a1,a2,a3,a4,a5,a6)&&
tem5(a1,a2,a3,a4,a5,a6)&&
tem6(a1,a2,a3,a4,a5,a6)
){
System.out.println("a1 "+a1);
System.out.println("a2 "+a2);
System.out.println("a3 "+a3);
System.out.println("a4 "+a4);
System.out.println("a5 "+a5);
System.out.println("a6 "+a6);
}
}
}
}
}
}
}
}
private static boolean tem6(int a1, int a2, int a3, int a4, int a5, int a6) { //如果D不去,那么E也决定不去。
if(a4==0){
if(a5==0){
return true;
}
return false;
}
return false;
}
private static boolean tem5(int a1, int a2, int a3, int a4, int a5, int a6) { //C,D两人中也只要1人参加会议;
if((a3+a4)==1){
return true;
}
return false;
}
private static boolean tem4(int a1, int a2, int a3, int a4, int a5, int a6) { //A,D两人中只1人参加会议;
if((a1+a4)==1){
return true;
}
return false;
}
private static boolean tem3(int a1, int a2, int a3, int a4, int a5, int a6) {// B和C两人一致决定,要么两人都去,要么两人都不去;
if((a2+a3)==2||(a2+a3)==0){
return true;
}
return false;
}
private static boolean tem2(int a1, int a2, int a3, int a4, int a5, int a6) {// A,E,F 3人中有2人参加会议;
if((a1+a5+a6)==2){
return true;
}
return false;
}
private static boolean tem1(int a1, int a2, int a3, int a4, int a5, int a6) { // A,B两人至少有1人参加会议
if((a1+a2)==1||(a1+a2)==2){
return true;
}
return false;
}
}
测试结果:
a1 1
a2 1
a3 1
a4 0
a5 0
a6 1
方法二:卫条件
package String;
public class Meting_2 {
// 暴力搜索
public static void main(String[] args) {
for (int a1 = 0; a1 <= 1; a1++) { // 0表示不去,1表示去
for (int a2 = 0; a2 <= 1; a2++) {
for (int a3 = 0; a3 <= 1; a3++) {
for (int a4 = 0; a4 <= 1; a4++) {
for (int a5 = 0; a5 <= 1; a5++) {
for (int a6 = 0; a6 <= 1; a6++) {
if (teml(a1, a2, a3, a4, a5, a6)) {
System.out.println("a1 " + a1);
System.out.println("a2 " + a2);
System.out.println("a3 " + a3);
System.out.println("a4 " + a4);
System.out.println("a5 " + a5);
System.out.println("a6 " + a6);
}
}
}
}
}
}
}
}
private static boolean teml(int a1, int a2, int a3, int a4, int a5, int a6) {
// 衛條件
if (!(a1 + a2 >= 1)) {
return false;
}
//条件2
if (a1 + a5 + a6 != 2) {
return false;
}
// 條件3
if (a2 + a3 == 1) {
return false;
}
//条件4
if (a1 + a4 != 1) {
return false;
}
//条件5
if (a3 + a4 != 1) {
return false;
}
//条件6
if (a4 == 0) {
if (a5 == 1) {
return false;
}
}
return true;
}
}
测试结果:
a1 1
a2 1
a3 1
a4 0
a5 0
a6 1
两种方法的对比,很明显卫条件非常好用!!!效率也高...