有人邀請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