题目:
A、B、C、D、E、F、G、H、I、J十名同学有可能参加本次竞赛,也有可能不参加。因为某种原因,他们是否可以
参加本次竞赛受到以下条件的限制:
1、如果A参加,B也参加;
2、如果C不参加,D也不参加;
3、A和C中只能有一人可以参加;
4、B和D有且只有一个人可以参加;
5、D、E、F、G、H五个人中至少有两个人参加;
6、C和G或者都参加,或者都不参加;
7、C、E、G、I中至多只能有两人参加;
8、如果E参加,那么F和G也都参加;
9、如果F参加,G和H就不能参加;
10、如果I和J都不参加,那么H必须参加。
请编程实现判断这些同学那些会参加本次竞赛,如果有多种可能,则输出所有可能情况,每一种情况占一行。
参加的同学字母按升序排列,之间用空格隔开。
以下方法是本人参照蓝桥杯首页(http://www.lanqiao.org//index.action)中的视频资料中老师讲解的往届的学生做的一个比较优秀的程序而写的,仅供参考。
package java课程;
public class Who_will_join
{
public static void main(String [] args)
{
int [] nums = {0,0,0,0,0,0,0,0,0,0};//为0就表示对应的学生不参加,为1就表示对应的学生参加
Fun(nums,0);
}
public static boolean Judge(int[] nums)
{
boolean j1 = (nums[0]==0)||(nums[1]==1);//如果A参加B就参加,这句话相当于要么A不参加,要么B参加
boolean j2 = (nums[2]==1)||(nums[3]==0);
boolean j3 = nums[0] + nums[2]<=1;
boolean j4 = nums[1] + nums[3]==1;
boolean j5 = nums[3] + nums[4] + nums[5] + nums[6] + nums[7]>=2;
boolean j6 = (nums[2] + nums[6]==0)||(nums[2] + nums[6]==2);
boolean j7 = nums[2] + nums[4] + nums[6] + nums[8]<=2;
boolean j8 = (nums[4]==0)||(nums[5] + nums[6]==2);
boolean j9 = (nums[5]==0)||(nums[6] + nums[7]==0);
boolean j10 = (nums[8] + nums[9]>=1)||(nums[7]==1);
return j1&&j2&&j3&&j4&&j5&j6&&j7&&j8&&j9&&j10;
}
public static void Fun(int[] nums,int n)
{
if(n>=10)
{
if(Judge(nums))
Show(nums);
return;
}
nums[n] = 0;
Fun(nums,n+1);
nums[n] = 1;
Fun(nums,n+1);
}
public static void Show(int [] nums)
{
for(int i = 0;i<nums.length;i++)
{
if(nums[i]==1)
{
System.out.print(" "+(char)(i+'A'));
}
}
System.out.println();
}
}
运行结果截图:
