卫条件——五个人究竟谁去参加了会议?

        在编写程序时,我们会不时的碰到一些问题,它们的出现与解决需要满足许多各种各样的条件,而这,就需要用到“卫条件”了。例如:有人邀请A,B,C,D,E,F 6个人参加一项会议,这6个人有些奇怪,因为他们有很多要求,已知:①A,B两人至少有1人参加会议;②A,E,F 3人中有2人参加会议;③B和C两人一致决定,要么两人都去,要么两人都不去;④A,D两人中只1人参加会议;⑤C,D两人中也只要1人参加会议;⑥如果D不去,那么E也决定不去。那么最后究竟有哪几个人参加了会议呢?

      思路其实很简单:用0表示不去参加会议,1表示去参加会议。一个条件用一个卫兵(即:卫条件)来筛选,这样经过6个卫兵的筛选之后,输出即为符合所有条件的结果(即:输出为1的就是参加会议的人)。筛选时我们可以再建一个方法,这个方法返回值为布尔型。条件的表达也可专门建一个方法。下面是代码:

public class attendeeOfMeeting {
    
	public static void main(String[] args) {//0代表不去,1代表去
       for(int a=0;a<2;a++){
    	   for(int b=0;b<2;b++){
    		   for(int c=0;c<2;c++){
    			   for(int d=0;d<2;d++){
    				   for(int e=0;e<2;e++){
    					   for(int f=0;f<2;f++){
    						   if(condition(a,b,c,d,e,f)){
    							   System.out.println("a="+a+",b="+b+",c="+c+",d="+d+",e="+e+",f="+f);
    						   }
    					   }
    				   }
    			   }
    		   }
    	   }
       }
	}
    
    private static int addGo(int...args){//※可变参数※
    	int sum=0;
    	for(int i:args){
    		if(i==1){//统计有几人去
    			sum ++;
    		}
    	}
    	return sum;
    }
    //0--不去,1--去
	private static boolean condition(int a, int b, int c, int d, int e, int f) {
		if( !(addGo(a,b)>=1) ){//卫条件1)A,B两人至少有1人参加会议;
			return false;
		}
		if( !(addGo(a,e,f)==2) ){//卫条件2)A,E,F 3人中有2人参加会议;
			return false;
		}
		if( addGo(b,c)==1 ){//卫条件3)B和C两人一致决定,要么两人都去,要么两人都不去;
			return false;
		}
		if( !(addGo(a,d)==1) ){//卫条件4)A,D两人中只1人参加会议;
			return false;
		}
		if( !(addGo(c,d)==1) ){//卫条件5)C,D两人中也只要1人参加会议;
			return false;
		}
		if( d==0 && e==1 ){//卫条件6)如果D不去,那么E也决定不去。
			return false;
		}
		return true;
	}
}

(在addGo()方法中,用到了可变参数。简单介绍一下,可变参数:即为可以随意变化的参数,无论多少个都可以。例如:我们平时用的求和方法sum(),当我们求2个或多个数的sum时,因为我们不确定究竟要求几个数的sum,所以就无法确定sum()方法有几个参数,这时候如果用可变参数的话将会事半功倍,我们只需要写一个sum()方法就可以兼容无论多少个数的求和方法)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值