zoukankan      html  css  js  c++  java
  • 2020-5-13递归练习 六人参加竞赛

    2020-5-13递归练习 六人参加竞赛

    一、题目

    Java编程:**从A、B、C、D、E、F六位同学中挑选一些人去参加某项竞赛活动。根据竞赛规则,参赛人员须满足下列要求:

    • (1)A、B两人中至少去一个人;
    • (2)A、D两人不能同时去;
    • (3)A、E、F三人中要选两人去;
    • (4)B、C两人都去或者都不去;
    • (5)C、D两人中去一个人;
    • (6)若D不去,则E也不去。
      选中参赛的人是( )

    二、思路:

    • 用boolean数组来表示,这六个人去不去。
    • 用六个boolean表示,六个条件。
    • 递归暴力搜。
    • 用递归,就不用了六个for循环了。

    三、代码

    static boolean[] b = new boolean[6];
    	static char[] c = { 'A', 'B', 'C', 'D', 'E', 'F' };
    
    	public static void main(String[] args) {
    
    		f(0);
    		for (int i = 0; i < b.length; i++) {
    			if (b[i]) {
    				System.out.print(c[i]+" ");
    			}
    		}
    	}
    //	static int count = 0;
    
    	private static boolean flag = false;
    
    	static void f(int x) {
    		// 百度了一下非运算,优先级太高了,得加括号
    		boolean tf1 = b[0] || b[1];// ab至少去一个人,可以都去.或运算
    		boolean tf2 = !(b[0] && b[3]); // ad不能同时去,可以都不去 先且运算,同时去,然后非运算
    		boolean tf3 = !(b[0] ^ b[4] ^ b[5]) && ((b[0] || b[4] || b[5])); // aef选两个,异或选出两个加上全都不选,在通过或排除
    		boolean tf4 = !(b[1] ^ b[2]); // bc都去或都不去。异或
    		boolean tf5 = b[2] ^ b[3]; // cd去一个人,二选一
    		boolean tf6 = b[3] || !(b[3] ^ b[4]); // d不去,e不去,d去,e可不去。
    
    		if (tf1 && tf2 && tf3 && tf4 && tf5 && tf6) {
    			flag = true;
    			return;
    		} else {
    			for (int i = x; i < b.length; i++) {
    				b[i] = true;
    //				count++;
    				f(x + 1);
    				if (flag) 
    					return;
    				b[i] = false;
    			}
    		}
    
    	}
    

    用int来代替,在操作更秀一点,判断起来容易一点。
    参见:

    https://blog.csdn.net/qq_36653524/article/details/93511279

    引用的第一个种方式,用了六个for,用递归可以少写一些for。数字相加的结果表示去了几个人........
    第二种,二进制进行计算。只用一个for循环就行。每个人有两种状态就是2^6 中状态,从1循环加到2^6,来判断就行。
    我的递归代码很烂。还得多练练。

    四、总结

    以上三种方法,都是暴力操作,不知道有没有大佬有更秀的方法。

  • 相关阅读:
    DotNet的JSON序列化与反序列化
    DotNet指定文件显示的尺寸
    将文本文件的内容存储在DataSet中的方法总结
    Apple的LZF算法解析
    DotNet常用排序算法总结
    C#创建安全的字典(Dictionary)存储结构
    C#创建安全的栈(Stack)存储结构
    转化代码:添加在您网页中用户触发转化行为之后的地方。添加方法
    nginx配置ThinkPHP5二级目录访问
    好久没写原生的PHP调用数据库代码了分享个
  • 原文地址:https://www.cnblogs.com/friend-c/p/12881958.html
Copyright © 2011-2022 走看看