【每日蓝桥】23、一四年省赛Java组真题“扑克序列”

你好呀,我是灰小猿,一个超会写bug的程序猿!

欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!

标题:扑克序列

A A 2 2 3 3 4 4,一共四对扑克牌,请你把它们排成一行,

要求:两个A中间有一张牌,两个2之间有两张牌,两个3之间有三张牌,两个4之间有四张牌。

请填写出所有符合要求的排列中,字典序最小的那个。

例如:22AA3344比A2A23344字典序小,当然,它们都不是满足要求的答案。

请通过浏览器提交答案,“A”一定不要用小写字母a,也不要用“1”代替,字符间一定不要留空格。

解题思路:

本题在求解上主要还是考察了排列组合的思想,利用排列组合将8张扑克牌所有的可能结果全都枚举出来,然后判断组合是否符合题目中所给的要求,在这里如果想要输出最小的排列顺序,那么是需要进行字符串的大小的比较的,这里采用的方法是compareTo方法。

设a,b是两个字符串,则对a和b进行大小比较的方法是:

a.compareTo(b)

a==b 返回0

a>b 返回值大于0

a<b 返回值小于0

答案源码:

package 一四年省赛真题;

import java.util.ArrayList;
import java.util.List;

/**标题:扑克序列
A A 2 2 3 3 4 4,一共四对扑克牌,请你把它们排成一行,
要求:两个A中间有一张牌,两个2之间有两张牌,两个3之间有三张牌,两个4之间有四张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344比A2A23344字典序小,当然,它们都不是满足要求的答案。
请通过浏览器提交答案,“A”一定不要用小写字母a,也不要用“1”代替,字符间一定不要留空格。
*/
public class Year2014_Bt7 {
	
	static String minString = "AA223344";	//定义最小的字符串
	public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("A");
		list.add("A");
		list.add("2");
		list.add("2");
		list.add("3");
		list.add("3");
		list.add("4");
		list.add("4");
		f(list,0);
		System.out.println(minString);
	}

	/**
	 * 列表元素的全排列
	 * */
	private static void f(List<String> list,int n) {
		if (n==list.size()) {
			if (check(list)) {
				String ansList = "";
				for (String string : list) {
					ansList+=string;
				}
				//判断当前的字符串是否小于新组成的字符串
				/**
				 * a.compareTo(b)方法
				 * a==b 返回0
				 * a>b 返回值大于0
				 * a<b 返回值小于0
				 * */
				if (minString.compareTo(ansList)>0) {
					minString=ansList;
				}
			}
		}
		for (int i = n; i < list.size(); i++) {
			String t = list.get(n);
			list.set(n, list.get(i));
			list.set(i, t);
			
			//递归确定下一个元素
			f(list, n+1);
			
			//回溯,返回原序列
			t = list.get(n);
			list.set(n, list.get(i));
			list.set(i, t);
		}
		
		
	}

	/**
	 * 检查组合是否符合要求
	 * */
	private static boolean check(List<String> list) {
		if (list.lastIndexOf("A")-list.indexOf("A")==2
				&&list.lastIndexOf("2")-list.indexOf("2")==3
				&&list.lastIndexOf("3")-list.indexOf("3")==4
				&&list.lastIndexOf("4")-list.indexOf("4")==5) {
			return true;
		}
		return false;
	}

}

输出样例:

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

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

灰小猿陪你一起进步!

猜你喜欢

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