藍橋杯 猜字母
阿新 • • 發佈:2019-01-29
text 題解 題目 猜字母 new urn oid dfs -s
猜字母
題目:
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 }
藍橋杯 猜字母