第七届蓝桥杯第三题

这道题采用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); 
		
	}
}

你可能感兴趣的:(练习题)