你好呀,我是灰小猿,一个超会写bug的程序猿!
欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!
标题:凑算式
解题思路:
本题的求解思路是:首先应该对1~9这9个数进行全排列,排列之后数组中的数字安装题目要求分割,这个时候我们要注意的是:得到的三个数据都是分数,且分母不相同,这个时候我们就需要对数据进行同分,得到分母一样的三个数字,之后再对这三个数字相加,判断得到的分子是否是分母的10倍,如果是则说明该排列下的情况是成立的,有关数组元素的组合、排列、全排列不懂的小伙伴可以看我的这篇文章,【递归+回溯】实现数组元素的组合、排列和全排列
排列组合问题也是蓝桥杯近几年的高频考点之一,一定要掌握!
答案源码:
public class Year2016_Bt3 { static int ans = 0; public static void main(String[] args) { int [] arr = {1,2,3,4,5,6,7,8,9}; f(arr,0); System.out.println(ans); } //将数组元素进行全排列 private static void f(int[] arr, int k) { //如果数组已经排列完毕 if (k==arr.length) { check(arr); } for (int i = k; i < arr.length; i++) { int t = arr[k]; arr[k] = arr[i]; arr[i] = t; //排列确定下一个元素 f(arr, k+1); //回溯 t = arr[k]; arr[k] = arr[i]; arr[i] = t; } } //判断排列好的元素是否符合题目要求 private static void check(int[] arr) { int a = arr[3]*100+arr[4]*10+arr[5];//百位数的分子 int b = arr[6]*100+arr[7]*10+arr[8];//百位数的分母 int mol = arr[0]*arr[2]*b + arr[1]*b + a*arr[2];//同分后的分子 int den = arr[2]*b;//同分后的分母 //如果同分之后,分子是分母的10倍,则说明符合题目要求 if (den*10==mol) { System.out.println(arr[0] + " + " + arr[1] + "/" + arr[2] + " + " + a + "/" + b); ans++; } } }
输出样例: