zoukankan      html  css  js  c++  java
  • Java语言实现随意组合

    Java语言实现随意组合

    设计题目
    小明被绑架到X星球的巫师W那里。当时,W正在玩弄两组数据 (2 3 5 8) 和
    (1 4 6 7),他命令小明从一组数据中分别取数与另一组中的数配对,共配成4对
    (组中的每个数必被用到)。
    小明的配法是:{(8,7),(5,6),(3,4),(2,1)}
    巫师凝视片刻,突然说这个配法太棒了!
    因为:
    每个配对中的数字组成两位数,求平方和,无论正倒,居然相等:
    87^2 + 56^2 + 34^2 + 21^2 = 12302
    78^2 + 65^2 + 43^2 + 12^2 = 12302
    小明想了想说:“这有什么奇怪呢,我们地球人都知道,随便配配也可以
    啊!”
    {(8,6),(5,4),(3,1),(2,7)}
    86^2 + 54^2 + 31^2 + 27^2 = 12002
    68^2 + 45^2 + 13^2 + 72^2 = 12002
    巫师顿时凌乱了。。。。。
    请你计算一下,包括上边给出的两种配法,巫师的两组数据一共有多少种配
    对方案具有该特征。
    配对方案计数时,不考虑配对的出现次序。
    就是说:{(8,7),(5,6),(3,4),(2,1)}与{(5,6),(8,7),(3,4),(2,1)}是同一种
    方案。
    Java语言:

    public class RandomCombination {
    	static int [] book2 = {0, 0, 0, 0};               // 标记
    	static int [] arr1 = {2, 3, 5, 8};
    	static int [] arr2 = {1, 4, 6, 7};
    	static int [] arrCombination = new int[4];        // 组合数组
    	static int count = 0;
    	
    	public static void main(String[] args){
    		dfs(0);
    		System.out.println("一共有 " + count + " 种配对");
    	}
    	
    	// 个位和十位互换
    	public static int exchange(int n) {        
    		return n%10*10 + n/10;
    	}
    	
    	// 判断是否符合四个数与其倒过来的平方和相等
    	public static boolean judge(int n[]) {    
    		double sum1 = 0, sum2 = 0;
    		for(int i = 0;i < 4;i++) {
    			sum1 += Math.pow(n[i], 2);
    			sum2 += Math.pow(exchange(n[i]), 2);
    		}
    		if(sum1 == sum2) 
    			return true;
    		return false;
    	}
    	
    	// 深度优先搜索
    	public static void dfs(int step) {    
    		if(step == 4)              // 该搜索结束
    			return;       
    		for(int i = 0;i < 4;i++)     
    		{
    			if(book2[i] == 0)    
    			{
    				arrCombination[step] = arr1[step]*10 + arr2[i];    // 两数组合 arr1 中的数为十位,arr2 中的数为个位
    				if(step == 3)       // 组合成功
    					if(judge(arrCombination))    // 若符合,则加一
    						count++;
    				book2[i] = 1;       // arr2 中第 i 个数字标记已使用
    				dfs(step+1);        // 继续搜索
    				book2[i] = 0;       // 取消标记
    			}
    		}
    		return; 
    	}
    }
    /*Code Running Results
    一共有 24 种配对
    */
    
    
  • 相关阅读:
    LeetCode 21. 合并两个有序链表
    LeetCode 20. 有效的括号
    LeetCode 19. 删除链表的倒数第N个节点
    AI
    http
    IP地址
    wiodows /linux CMD
    git
    AI
    JS常用的获取值和设值的方法
  • 原文地址:https://www.cnblogs.com/jiaohuadehulike/p/14295007.html
Copyright © 2011-2022 走看看