标题:扑克序列
A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。
思路:暴力搜索,根据每个数都必须在数组内和数组内必须使得A 2 3 4都为2个两个判定依据进行判定。找出相应的结果。
程序输出结果:2342A3A4 4A3A2432
正确答案:2342A3A4
public class Main {
public static void main(String[] args) {
int a = 0, b = 0, c = 0, d = 0;//计数的,记录A,2,3,4在数组中的个数
char[] s = new char[8];
for (int i = 7; i >= 0; i--) {//A
for (int j = 7; j >= 0; j--) {//2
for (int k = 7; k >= 0; k--) {//3
for (int l = 7; l >= 0; l--) {//4
if (l - 5 >= 0 && k - 4 >= 0 && j - 3 >= 0 && i - 2 >= 0 && i != j && i != k && i != l && j != k
&& j != l && k != l && (i - 2) != (j - 3) && (i - 2) != (k - 4) && (i - 1) != (l - 5)
&& (j - 3) != (k - 4) && (j - 3) != (l - 5) && (k - 4) != (l - 5)) {//判断条件:即,每个数字就在数组里面,并且每个数字在数组中的位置都不相等
s[i] = s[i - 2] = 'A';//对应上面的A
s[j] = s[j - 3] = '2';//对应上面的2
s[k] = s[k - 4] = '3';//对应上面的3
s[l] = s[l - 5] = '4';//对应上面的4
for (int z = 0; z < 8; z++) {//每次都判定,查看数组中A,2,3,4的个数是否等于2,都等于2输出相应的结果,记住。。如果不是一定要重新给计数的abcd赋值为0.
if (s[z] == 'A') {
a++;
} else if (s[z] == '2') {
b++;
} else if (s[z] == '3') {
c++;
} else if (s[z] == '4') {
d++;
}
}
if (a == 2 && b == 2 && c == 2 && d == 2) {
System.out.print(s);
System.out.println();
} else {
a = 0;
b = 0;
c = 0;
d = 0;
}
}
}
}
}
}
}
}