題目描述
撲克序列
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
有其他更好的解法歡迎在評論區分享噢!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254969.html
標籤:其他
上一篇:近期感悟以及2021計劃
