猜字母
题目:
A A 2 2 3 3 4 4, 一共4对扑克牌。请你把它们排成一行。
要求:两个A中间有1张牌,两个2之间有2张牌,两个3之间有3张牌,两个4之间有4张牌。
请填写出所有符合要求的排列中,字典序最小的那个。
例如:22AA3344 比 A2A23344 字典序小。当然,它们都不是满足要求的答案。
请通过浏览器提交答案。“A”一定不要用小写字母a,也不要用“1”代替。字符间一定不要留空格。
题解:全排列后再判断 比赛的时候不知道怎么脑子瓦特了 愣是把A 写成了1
1 package AllWATER;
2
3 public class 猜字母 {
4 static int [] a = {0,1,1,2,2,3,3,4,4};
5 static int [] vis = new int [10];
6 static int [] num = new int [10];
7 static int [] book = new int [10];
8 static int cnt = 0;
9 static int flag1 = 0;
10 static void check() {
11 for(int i=0;i<book.length;i++)
12 book[i] = 0;
13
14 for(int i=1;i<=8;i++) {
15 if(book[i]==0&&i+2<=8&&book[i+2]==0&&num[i]==1&&num[i+2]==1)
16 {
17 book[i] = 1;book[i+2] = 1;
18 }
19 if(book[i]==0&&i+3<=8&&book[i+3]==0&&num[i]==2&&num[i+3]==2)
20 {
21 book[i] = 2;book[i+3] = 2;
22 }
23 if(book[i]==0&&i+4<=8&&book[i+4]==0&&num[i]==3&&num[i+4]==3)
24 {
25 book[i] = 3;book[i+4] = 3;
26 }
27 if(book[i]==0&&i+5<=8&&book[i+5]==0&&num[i]==4&&num[i+5]==4)
28 {
29 book[i] = 4;book[i+5] = 4;
30 }
31
32 }
33 int flag=0;
34 for(int i=1;i<=8;i++) {
35 if(book[i]==0)
36 flag=1;
37 }
38 if(flag == 0&&flag1 == 0) {
39 for(int i=1;i<=8;i++) {
40 System.out.print(book[i]);
41 }
42 System.out.println();
43 flag1 = 1;
44 }
45 }
46 static void dfs(int step) {
47 if(step == 9) {
48 check();
49 return;
50 }
51 //System.out.println("haha");
52 for(int i=1;i<9;i++) {
53 if(vis[i] == 0) {
54 vis[i] = 1;
55 num[step] = a[i];
56 dfs(step+1);
57 vis[i] = 0;
58 }
59 }
60 }
61 public static void main(String[] args) {
62 dfs(1);
63 }
64 }