3 2 相鄰數字的基數不等比 skew數

2021-08-26 17:31:07 字數 942 閱讀 4869

問題定義:

在 skew binary表示中, 第 k 位的值 xk表示 xk.(2k+1-1)。每個位上的可能數字是 0 或1,最後面乙個非零位可以是 2,例如, 10120(skew) = 1*(2^5-1) + 0*(2^4-1) + 1*(2^3-1)+ 2*(2^2-1)+ 0*(2^1-1) = 31 + 0 + 7 + 6 + 0 = 44.前十個 skew數是 0、1、2、10、11、12、20、100、101、以及 102。

輸入資料

輸入包含一行或多行,每行包含乙個整數 n。如果 n = 0 表示輸入結束,否則 n是乙個 skew 數

輸出要求

對於每乙個輸入,輸出它的十進位制表示。轉換成十進位制後, n 不超過 2^31-1 =2147483647

輸入樣例

10120

200000000000000000000000000000

101000000000000000000000000000000

11100

11111000001110000101101102000

0輸出樣例

442147483646

3214748364747

1041110737

解題思路

skew數的相鄰位上,基數之間沒有等比關係。計算每一位的基數後,再把乙個 skew數轉換成十進位制表示就很簡單。對於長度為 k的 skew數,最後一位數字的基數為 2^k-1。由於轉換成十進位制後, n 不超過 231-1,因此輸入 skew數的最大長度不超過 31。

用乙個整型陣列 base[31],依次儲存 skew數最末位、倒數第 2位、…..、第 31位的基數值。使用這個陣列,把每個 skew數轉換成對應的十進位制數。

base[0] = 1

base[k] = 2^(k+1)-1 = 2 * (2^k - 1)+1 = 2 * base[k -1] + 1

**如下:

201409 1 相鄰數對

試題編號 201409 1 試題名稱 相鄰數對 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。輸入格式 輸入的第一行包含乙個整數n,表示給定整數的個數。第二行包含所給定的n個整數。輸出格式 輸出乙個整數,表示值正好...

201409 1 相鄰數對

試題編號 201409 1 試題名稱 相鄰數對 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。輸入格式 輸入的第一行包含乙個整數n,表示給定整數的個數。第二行包含所給定的n個整數。輸出格式 輸出乙個整數,表示值正好...

201409 1 相鄰數對

問題描述 給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。輸入格式 輸入的第一行包含乙個整數n,表示給定整數的個數。第二行包含所給定的n個整數。輸出格式 輸出乙個整數,表示值正好相差1的數對的個數。樣例輸入 610 2 6 3 7 8 樣例輸出 3樣例說明 值正好相差1的數對包括 2...