卫条件,核心思想就是只找反例,return出去 下面我们通过一个小题目来演示:
这里如果我们用传统的if来判断,那么绕的太多了,所以我们只需将每一个条件不满足的return false 就行了。
具体实现代码如下:
package cn.hncu.part1;
/*
*1)A,B两人至少有1人参加会议;
2)A,E,F 3人中有2人参加会议;
3)B和C两人一致决定,要么两人都去,要么两人都不去;
4)A,D两人中只1人参加会议;
5)C,D两人中也只要1人参加会议;
6)如果D不去,那么E也决定不去。
*/
public class join {
public static void main(String[] args) {
for (int a1 = 0; a1 <= 1; a1++) {
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 (ok(a1, a2, a3, a4, a5, a6)) {
System.out.println("a1--" + a1 + ",a2--"
+ a2 + ",a3--" + a3 + ",a4--" + a4
+ ",a5--" + a5 + ",a6--" + a6);
break;
}
}
}
}
}
}
}
}
private static boolean ok(int a1, int a2, int a3, int a4, int a5, int a6) {
if (!(countGo(a1, a2) >= 1)) {// A,B两人至少有1人参加会议;
return false;
}
if (!(countGo(a1, a5, a6) == 2)) {// A,E,F 3人中有2人参加会议;
return false;
}
if (!(countGo(a2, a3) == 2 || countGo(a2, a3) == 0)) {// B和C两人一致决定,要么两人都去,要么两人都不去;
return false;
}
if (!(countGo(a1, a4) == 1)) {// A,D两人中只1人参加会议;
return false;
}
if (!(countGo(a3, a4) == 1)) {// C,D两人中也只要1人参加会议;
return false;
}
if (countGo(a4) == 0 && countGo(a5) == 1) {// 如果D不去,那么E也决定不去。
return false;
}
return true;
}
private static int countGo(int... mee) {
int count = 0;
for (int me : mee) {
if (me == 1) {
count++;
}
}
return count;
}
}