参加会议问题

有人邀请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也决定不去。

那么最后究竟有哪几个人参加了会议呢?


六个人,使用a1,a2,a3,a4,a5,a6来表示,暴力法就可以解决了。主要是卫条件的使用。

public class Meeting {
	public static void main(String[] args) {
		//1代表去,2代表不去
		for(int a1=1; a1<=2; a1++){
			for(int a2=1; a2<=2; a2++){
				for(int a3=1; a3<=2; a3++){
					for(int a4=1; a4<=2; a4++){
						for(int a5=1; a5<=2; a5++){
							for(int a6=1; a6<=2; a6++){
						       if( t(a1,a2,a3,a4,a5,a6) ){
						    	   System.out.println("a1="+a1+",a2="+a2+",a3="+a3+",a4="+a4+",a5="+a5+",a6="+a6);
						       }
							}
						}
					}
				}
			}
		}
	}
	
	//统计去的人数
	private static int countGo(int...as){
		int sum=0;
		for(int a: as){
			if(a==1){
				sum++;
			}
		}
		return sum;
	}
	
	//卫条件,反逻辑
	static boolean t(int a1, int a2, int a3, int a4, int a5, int a6){
		//条件1--卫条件--卫兵
		if(countGo(a1,a2)<1){
			return false;
		}
		//2
		if( countGo(a1,a5,a6)!=2 ){
			return false;
		}
		//3
		if( countGo(a2,a3)==1 ){
			return false;
		}
		//4
		if( countGo(a1,a4)!=1 ){
			return false;
		}
		//5
		if( countGo(a3,a4)!=1 ){
			return false;
		}
		//6
		if( countGo(a4)==0 && countGo(a5)==1){
			return false;
		}
		//如果程序能够到达这里,说明前面的6个条件都满足,就可以认为是答案了
		return true;
	}
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值