进制思想
http://blog.csdn.net/twtsa/article/details/8055143
第20題:字符串數組seq[] = a,b,c,d,aa,ba,ca,da,ab,bb,cb,db,ac...,aaa,baa,...
(1)aaa是第幾個字符串
(2)ababacd是第幾個
(3)第1000個字符串是什么(4)編寫函數find(),返回字符串在seq中是第幾個(語言不限)
分析:
(1).長度,很容易推導出長度是n的字符串在第4^(n-1)個之后,aaa是1位和2位全排列后的第一個,即第4^(3-1)+4^(2-1)之后的第一個,也即第21個
(2)字符,每個字符可以判斷出它之前的字符全排列了多少次,
字 ? ?符: a b a b a c d
全排列: 1 2 1 2 1 3 4
4^次冪: 0 1 2 3 4 5 6
即2*4^1+1*4^2+2*4^3+1*4^4+3*4^5+4*4^6?= 19864 (考場不讓用計算器...換成2的次冪來算)
(3)把1000轉為二進制是 11 11 10 10 00
他們分別對應4進制里的 ?3 ? 3 ? 2 ? 2 ? 0
對應字符就是 c c b b X,這里不好表示,先吧1000加個1
得到11 11 10 10 01,即c c b b a. 倒序就是abbcc,這里算出來的是1001的字符串
那第1000個是上一個, 即 abbcc-1 =?dabcc
(4)可執行代碼如下:
[cpp]?view plaincopy
aaa 就是 1*4^0 + 1*4^1 + 1*4^2 = 21
總結