1. 程式人生 > >藍橋杯 猜字母

藍橋杯 猜字母

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 }

藍橋杯 猜字母