您的位置:首页 > 编程语言 > Java开发

谁将会参加比赛的问题(java 实现)

2016-03-14 17:05 681 查看
或许很多人和我之前想法一样,这不就是个逻辑题嘛,也能代码实现? 对,可以

代码也就是做出逻辑判断

1.把10个人可能参赛的所有可能排列全列出来,再从结果中循环对条件进行判断
2.在每次排列的过程中就进行条件判断


题目:

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
= 0;

Fun(nums,n+1);

nums
= 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();

}

}

运行结果截图:



通过这个视频和深入理解这个程序,我发现以前学的离散数学真的很有用,可惜以前没怎么认真学好啊,需要补习一下了。要学好编程果然数学和逻辑学必须好啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: