【蓝桥杯JavaB组真题详解】扑克序列(2014)

题目描述

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

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

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

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

解题思路

我的思路是
将A的坐标记作a,a+2;
将2的坐标记作b,b+3;
将3的坐标记作c,c+4;
将4的坐标记作d,d+5;
然后排列组合去掉占重复坐标的情况,得到答案,一个答案有两种情况,正序和反序都列出来
参考代码

import java.util.Arrays;

public class Main {
     
	static char[] arr=new char [8]; 
	public static void main(String[] args) {
     
		dfs();
	}
	/*
	 * 第一个A下标为a,第二个A下标为a+2;
	 * 第一个2下标为b,第二个2下标为b+3;
	 * 第一个3下标为c,第二个3下标为c+4;
	 * 第一个4下标为d,第二个4下标为d+5;
	 */
	public static void dfs() {
     
		for(int a=1;a<=6;a++) {
     
			for(int b=1;b<=5;b++) {
     
				for(int c=1;c<=4;c++) {
     
					for(int d=1;d<3;d++) {
     
						
						String str = ""+a+b+c+d+(a+2)+(b+3)+(c+4)+(d+5);
						boolean flag = true;
						String [] getString = str.split("");
						Arrays.sort(getString);
						for(int i=0;i<getString.length-1;i++) {
     
							if(getString[i].equals(getString[i+1])) {
     
								flag = false;
								break;
							}
						}
						
						if(flag) {
     
							arr[a-1]=arr[a+1]='A';
							arr[b-1]=arr[b+2]='2';
							arr[c-1]=arr[c+3]='3';
							arr[d-1]=arr[d+4]='4';
							for(int i=0;i<arr.length;i++) {
     
								System.out.print(arr[i]);
							}
							System.out.println();
							for(int i=arr.length-1;i>=0;i--) {
     
								System.out.print(arr[i]);
							}
							System.out.println();
						}
					}
				}
			}
		}
	}

}

运行结果
4A3A2432
2342A3A4
答案
取2342A3A4

有其他更好的解法欢迎在评论区分享噢!

你可能感兴趣的:(蓝桥杯JavaB组真题详解,字符串,算法,数据结构,java,c++)