你好呀,我是灰小猿,一个超会写bug的程序猿!
欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!
标题:九数组分数
1、2、3...9这九个数字组成一个分数,其值恰好为1/3,如何组法?
下面的程序实现了该功能,请填写划线处缺失的代码,
public class Year2015_Bt5 { public static void text(int[] x) { int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3]; int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8]; if (a*3==b) System.out.println(a + " " + b); } public static void f(int[] x,int k) { if (k>=x.length) { text(x); return; } //利用排列组合的思想将数组中的数全排列, for (int i = k; i < x.length; i++) { {int t = x[k];x[k]=x[i];x[i]=t;} //确定这一位的数值 f(x, k+1); //递归确定下一位的数值 __________________________________ //填空内容 } } public static void main(String[] args) { int [] x = {1,2,3,4,5,6,7,8,9}; f(x, 0); } }
注意:只写横线处缺失的代码,不要书写任何题面已有代码或说明性文字
解题思路:
本题在求解上实际上是考察了数组元素全排列的思想,这也是蓝桥杯试题汇总经常出现的典型算法案例,所以十分有必要掌握,关于数组元素的排列组合的相关算法,小伙伴可以看我的这篇文章对其进行的详细讲解“【递归+回溯】实现数组元素的组合、排列和全排列”
答案源码:
public class Year2015_Bt5 { public static void text(int[] x) { int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3]; int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8]; if (a*3==b) System.out.println(a + " " + b); } public static void f(int[] x,int k) { if (k>=x.length) { text(x); return; } //利用排列组合的思想将数组中的数全排列, for (int i = k; i < x.length; i++) { {int t = x[k];x[k]=x[i];x[i]=t;} //确定这一位的数值 f(x, k+1); //递归确定下一位的数值 int t = x[k];x[k]=x[i];x[i]=t; //填空内容 } } public static void main(String[] args) { int [] x = {1,2,3,4,5,6,7,8,9}; f(x, 0); } }
输出样例: