第7回ブルーブリッジカップ第3題

1292 ワード

この問題はdfs直接方式を採用し、1-9の全配列を生成し、sumが=10であるかどうかを計算する.
またc++を使用する場合は、ライブラリ関数next_を使用できます.permutation()関数;この関数ヘッダファイルincludeは、全配列関数を参照できます.
package com.huat.lanqiao7;
/**
 * 
 * @author yanzz
 * @    :2018 3 13 
 * @    :   
 *      B      DEF
 *A + --- + ------- = 10
 *       C      GHI         
 * 
 * 
 * 
 *                A~I  1~9   ,            。
 * 
 *             : 6+8/3+952/714       , 5+3/1+972/486       。
 * 
 *                       ?
 * @version:
 */
public class NO_3 {
	
	private static int[] num = new int[10];
	private static int ans = 0;
	public static boolean[] visit = new boolean[10];
	
	public static void judge() {
		 double sum = num[0] + (double)num[1] / num[2] + (double)(num[3]*100+num[4]*10+num[5])/(num[6]*100+num[7]*10+num[8]);  
		    if(sum == 10)  
		    {  
		        ans ++;  
		    }  
	}
	
	public static void dfs(int i) {
		/**
		 * i  num   0-8  
		 */
		if(i == 9) {
			judge();
			return;
		} else {
			for(int index = 1; index < 10; index++) {
				/**
				 * index    1-9  ,visit  1-9      
				 */
				if(!visit[index]) {
					visit[index] = true;	
					num[i] = index;
					dfs(i + 1);
					visit[index] = false;
				}
			}
		}
	}
	
	public static void main(String[] args) {
		dfs(0);
		System.out.println(ans); 
		
	}
}