A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。
题目分析:含有重复元素的排列问题
public class Main {
public static String result = "AAAAAAAA";
// 排列
public static void f(char[] a, int k) {
if (k == a.length - 1) {
work(a);
return;
} else {
for (int i = k; i < a.length; i++) {
{
char t = a[k];
a[k] = a[i];
a[i] = t;
}
f(a, k + 1);
{
char t = a[k];
a[k] = a[i];
a[i] = t;
}
}
}
return;
}
// 筛选符合题意的
public static void work(char[] a) {
char temp1 = 'A', temp2 = '2', temp3 = '3', temp4 = '4';
int dA = distance(a, temp1);
int d2 = distance(a, temp2);
int d3 = distance(a, temp3);
int d4 = distance(a, temp4);
// 两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌
if (dA == 1 && d2 == 2 && d3 == 3 && d4 == 4) {
String A = "";
for (int i = 0; i < a.length; i++) {
A += a[i];
}
if (A.compareTo(result) < 0)
result = A;
return;
}
}
// 计算相同字符之间的距离
public static int distance(char[] a, char temp) {
for (int i = 0; i < a.length; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] == temp && a[j] == temp) {
return j - (i + 1);
}
}
}
return 0;
}
public static void main(String[] args) {
f("AA223344".toCharArray(), 0);
System.out.println(result);
}
}
本文介绍了一个具体的排列问题实例,即如何将四对特定的扑克牌(AA223344)排列成一行,使得每对牌之间都有指定数量的牌间隔。文中提供了一段Java代码实现,该代码通过递归排列和条件筛选来找到字典序最小的符合条件的排列方案。
2555

被折叠的 条评论
为什么被折叠?



