【每日蓝桥】28、一五年省赛Java组真题“九数组分数”

你好呀,我是灰小猿,一个超会写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);

	}

}

输出样例:

其中有不足或者改进的地方,还希望小伙伴留言提出,一起学习!

感兴趣的小伙伴可以关注专栏!

灰小猿陪你一起进步!

猜你喜欢

转载自blog.csdn.net/weixin_44985880/article/details/114692274