Problem Statement |
|||||||||||||
|
一個二進制序列由下面的偽代碼生成: string A = "0"
While (A的長度小于等于n)
創(chuàng)建一個和A一樣長度的字符串B
For i=0,1,...length(A)-1
If (i 是完全平方數(shù))
B[i] = 1-A[i]
Else
B[i] = A[i]
令A(yù) = A + B (即將B拼接在A后面)
End While
Return A
請注意,在上面的偽代碼中,A[i]和B[i]分別表示字符串A和B中下標(biāo)為i的字符(下標(biāo)編號從0開始)。對“完全平方數(shù)”的定義是,對于整數(shù)i,存在整數(shù)j,使得i= j *j,則稱i為完全平方數(shù)。 下面具體說明序列生成的過程:如果n=7,則在每一輪迭代中,A的取值依次為:0, 01, 0110, 01101010,所以最終產(chǎn)生的二進制序列就是0,1,1,0,1,0,1,0 請返回上述序列中下標(biāo)為n的數(shù)字(該序列的下標(biāo)從0開始)(0=<n<=2,000,000,000) |
|||||||||||||
Definition |
|||||||||||||
|
|||||||||||||
#include<iostream>
#include<string>
using namespace std;
class BinarySequence

{
public:
int getValue(int n)
{
int l,i=0,k;//n由 n-2^(log2(n))變換而來
for(l=n;l>0;i^=1)
{
for(k=1;k<l;k<<=1);
l-=(k==l?k:(k>>1));
}
return i;
}
}; //這樣寫對嘛?剛開始寫錯代碼 才得了一半分數(shù)..

