逻辑判断:A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束 1. 如果A参加,B也参加;


/**
 * 
A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束
0:1  2  3  4  5  6  7  8  9 	

   1. 如果A参加,B也参加;
   2. 如果C不参加,D也不参加;
   3. A和C中只能有一个人参加;
   4. B和D中有且仅有一个人参加;
   5. D、E、F、G、H 中至少有2人参加;
   6. C和G或者都参加,或者都不参加;
   7. C、E、G、I中至多只能2人参加   
   8. 如果E参加,那么F和G也都参加。
   9. 如果F参加,G、H就不能参加
   10. 如果I、J都不参加,H必须参加

请编程根据这些条件判断这10名同学中参赛者名单。如果有多种可能,则输出所有的可能情况。
每种情况占一行。参赛同学按字母升序排列,用空格分隔。

比如:
C D G J
就是一种可能的情况。

多种情况的前后顺序不重要
 * @author wangmeng
 *
 */
public class 逻辑判断 {
	public static void main(String[] args) {
		int[] a = new int[10];
		createArr(a,0);
	}
    //枚举产生数组,因为每个元素的值不是0就是1,用0表示不参加,用1表示参加
 	private static void createArr(int[] a, int i) {
		if(i>=a.length){
			if(check(a)){//如果数组排列满的话 ,检测是否符合要求,符合则打印
				for(int j = 0;j< a.length;j++){
					if(a[j]!=0){
						System.out.print(  (char)(j + 'A') + "   " );
					}
				}
		 		System.out.println();
			}
			return;
		}
		
	  a[i] = 0;
	  createArr(a,i+1);
	  a[i]=1;
	  createArr(a,i+1);
	}
 
	//检测数组是否符合要求
	private static boolean check(int[] a) {
		// 在数学中a-->b  <==> ~a || b  意思是:如果由a推出b,等价于 非a或b
		boolean t1 = (a[0]==0)||(a[1]==1);
		boolean t2 = (a[2]==1||a[3]==0);
		boolean t3 = (a[0] + a[2]<=1);
		boolean t4 = (a[1] + a[3] ==1);
		boolean t5 = (a[3] + a[4] + a[5] + a[6] + a[7] >=2);
		boolean t6 = (a[2]==a[6]);
		boolean t7 = (a[2] + a[4] + a[6] + a[8] <=2);
		boolean t8 = (a[4]==0||a[5]+a[6]==2);
		boolean t9 = (a[5]==0||a[6] + a[7]==0);
		boolean t10 = (a[8] + a[9]>0||a[7]==1);
		return t1 && t2 && t3 && t4 && t5 && t6 && t7 && t8 && t9 && t10;
		 
		
		
	}

}


运行结果:
C   D   G   J   
C   D   G   H   
C   D   G   H   J   
B   C   G   H   
B   C   G   H   J   


参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

旧梦如烟

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值