時間限制:1s 空間限制:256MB 限定語言:不限
題目描述:
對稱就是最大的美學,現有一道關於對稱字符串的美學。已知:
第 1 個字符串:R
第 2 個字符串:BR
第 3 個字符串:RBBR
第 4 個字符串:BRRBRBBR
第 5 個字符串:RBBRBRRBBRRBRBBR
相信你已經發現規律了,沒錯!就是第 i 個字符串 = 第 i - 1 號字符串的取反 + 第 i - 1 號字符串;取反(R->B, B->R);
現在告訴你 n 和 k,讓你求得第 n 個字符串的第 k 個字符是多少。(k的編號從 0 開始)
輸入描述:
第一行輸入一個T,表示有T組用例;
接下里輸入T行,每行輸入兩個數字,表示n, k
1 <= T <= 100;
1 <= n <= 64;
0 <= k < 2^(n-1);
輸出描述:
輸出T行表示答案;
輸出 "blue" 表示字符是B;
輸出 "red" 表示字符是R;
補充說明:
輸出字符串區分大小寫,請注意輸出小寫字符串,不帶雙引號
示例1
輸入:
5
1 0
2 1
3 2
4 6
5 8
輸出:
red
red
blue
blue
blue
說明:
第 1 個字符串:R -> 第0個字符爲R
第 2 個字符串:BR -> 第1個字符爲R
第 3 個字符串:RBBR -> 第2個字符爲B
第 4 個字符串:BRRBRBBR -> 第6個字符爲B
第 5 個字符串:RBBRBRRBBRRBRBBR -> 第8個字符爲B
示例2
輸入:
1
64 73709551616
輸出:
red
function find(n, k) { if (n == 0) { return 'R'; } let len = Math.pow(2, n); // 如果 k 在後半段,則與前一個字符串相同 if (k >= len / 2) { let pos = k - len / 2; return find(n - 1, pos); } else { // 如果 k 在前半段,則與前一個字符串相反 return find(n - 1, k) == 'R' ? 'B' : 'R'; } } function main() { /* 5 8 n=5,k=8 第 5 個字符串:RBBRBRRBBRRBRBBR 總字符串個數 2^(5-1) = 16,半數half=16/2=8; k=8 == half(8),說明第k=8個字符在後半部分,(從“第 1 個字符串:R -> 第0個字符爲R ”,這句話可以看出,數字符串的時候是從0開始數,所以8在後半段了) 這串字符是繼承的第4個字符串,沒有進行翻轉,且此字符在第4個字符串的位置爲 8 - half(8)=0; 第 4 個字符串:BRRBRBBR 總字符串個數 2^(4-1) = 8,半數half=8/2=4; k=0<half(4),說明第k=0個字符在前半部分,這串字符是經過第3個翻轉的,則位置不變。 第 3 個字符串:RBBR 總字符串個數 2^(3-1)=4,半數half=4/2=2; k=0<half(2),說明第k=0個字符在前半部分,這串字符是經過第2個翻轉的,則位置不變; 第 2 個字符串:BR 總字符串個數 2^(2-1)=2,半數half=2/2=1; k=0<half(1),說明第k=0個字符在前半部分,這串字符是經過第1個翻轉的,則位置不變; 第 1 個字符串:R 總字符串個數 2^(1-1)=1,到了第一個R。 求出總共經過3次翻轉,R->B->R->B,得到結果爲blue 第 1 個字符串:R -> 第0個字符爲R 2^(1-1)=1,到了第一個R。 k = 0 1,k = 0 R 第 2 個字符串:BR -> 第1個字符爲R 2^(2-1)=2,半數half=2/2=1; k = 1 2,k = 0 0在前半段,求 1,0 的反, B 第 3 個字符串:RBBR -> 第2個字符爲B 2^(3-1)=4,半數half=4/2=2; k = 2 3,k = 0 0在前半段,求 2,0 的反, R 第 4 個字符串:BRRBRBBR -> 第6個字符爲B 2^(4-1)=8,半數half=8/2=4; k = 6 4,k = 0 0在前半段,求 3,0 的反, B 第 5 個字符串:RBBRBRRBBRRBRBBR -> 第8個字符爲B 2^(5-1)=16,半數half=16/2=8; k = 8 8在後半段,就求 4, 8-8 =》 4,0 B 如果 k 在後半段,則與前一個字符串相同, 如果 k 在前半段,則與前一個字符串相反 */ // n, k, 求第 n 個字符串的 第 k 個字符爲R let res = find(n - 1, k) == 'R' ? "red" : "blue"; console.log(res); }
參考:https://www.nowcoder.com/discuss/443826793280278528