题目---参加会议

[code]
参加会议:有人邀请A,B,C,D,E,F6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:
1.A,B两人至少有1人参加会议。
2.A,E,F3人中有2人参加会议。
3.B和C两人一致决定,要么两人都去,要么两人都不去。
4.A,D两人中只1人参加会议。
5.C,D两人中也只要1人参加会议。
6.如果D不去,那么E也决定不去。
那么最后究竟有哪几个人参加了会议呢?


分析:这里有六个人而每人也就两种情况,参加和不参加,所以有2的6次方个可能,而满足这里六个条件的只有一种。。。。

所以循环这2的6次方个可能,如果有某个可能满足这六个条件,那么他就是答案

因为每种答案只有两种可能,所以用二进制的0 1来简化循环

public class Conference {

/**
* 参加会议:有人邀请A,B,C,D,E,F6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:
1.A,B两人至少有1人参加会议。
2.A,E,F3人中有2人参加会议。
3.B和C两人一致决定,要么两人都去,要么两人都不去。
4.A,D两人中只1人参加会议。
5.C,D两人中也只要1人参加会议。
6.如果D不去,那么E也决定不去。
那么最后究竟有哪几个人参加了会议呢?
a b c d e f
1 2 3 4 5 6
*/
public static void main(String[] args) {
int count = 1;
for(int i=0;i<64;i++){
int a = i|(1<<6);
String[] b = Integer.toBinaryString(a).substring(1).split("");
if(
subject1(b[1],b[2])
&&subject2(b[1],b[5],b[6])
&&subject3(b[2],b[3])
&&subject4(b[1],b[4])
&&subject5(b[3],b[4])
&&subject6(b[4],b[5])
){
System.out.println(b[1]+""+b[2]+""+b[3]+""+b[4]+""+b[5]+""+b[6]);
}
}
}

private static int getPatiNum(String ...bs){
int count =0;
for(String b:bs){
if(b.equals("1"))count++;
}
return count;
}
//1.A,B两人至少有1人参加会议。
private static boolean subject1(String a,String b){
if(getPatiNum(a,b)>=1)return true;
else return false;
}
//2.A,E,F3人中有2人参加会议。
private static boolean subject2(String a,String e,String f){
if(getPatiNum(a,e,f)==2)return true;
else return false;
}
//3.B和C两人一致决定,要么两人都去,要么两人都不去。
private static boolean subject3(String b,String c){
if(getPatiNum(b,c)==2||getPatiNum(b,c)==0)return true;
else return false;
}
//4.A,D两人中只1人参加会议。
private static boolean subject4(String a,String d){
if(getPatiNum(a,d)==1)return true;
else return false;
}
//5.C,D两人中也只要1人参加会议。
private static boolean subject5(String c,String d){
if(getPatiNum(c,d)==1)return true;
else return false;
}
//6.如果D不去,那么E也决定不去。 (也就是如果d不去,e去 就不对)
private static boolean subject6(String d,String e){
if(getPatiNum(d)==0 && getPatiNum(e)==1)return false;
else return true;
}

}


[/code]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值