随笔-38  评论-23  文章-0  trackbacks-0

Problem Statement

    

一个二进制序列由下面的伪代码生成:

string A = "0"
            While (A的长度小于等于n)
            创建一个和A一样长度的字符串B
            For i=0,1,...length(A)-1
            If (i 是完全平方数)
            B[i] = 1-A[i]
            Else
            B[i] = A[i]
            令A = A + B (即将B拼接在A后面)
            End While
            Return A

请注意,在上面的伪代码中,A[i]和B[i]分别表示字符串A和B中下标为i的字符(下标编号从0开始)。对“完全平方数”的定义是,对于整数i,存在整数j,使得i= j *j,则称i为完全平方数。

下面具体说明序列生成的过程:如果n=7,则在每一轮迭代中,A的取值依次为:0, 01, 0110, 01101010,所以最终产生的二进制序列就是0,1,1,0,1,0,1,0

请返回上述序列中下标为n的数字(该序列的下标从0开始)(0=<n<=2,000,000,000)

Definition

    
Class: BinarySequence
Method: getValue
Parameters: int
Returns: int
Method signature: int getValue(int n)
(be sure your method is public)
//题目看错了...i是完全平方数..郁闷咯..以下代码是错的哈.
#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;
    }

}
;  //这样写对嘛?刚开始写错代码 才得了一半分数..
posted on 2009-05-31 19:46 米游 阅读(390) 评论(2)  编辑 收藏 引用 所属分类: ACM

评论:
# re: 有道难题... 2009-06-02 10:51 | yhj
int getValue(int n)
{
unsigned long k = 0;
while(n>0){
unsigned long i = 0,j = 0,m = 0;
while(j<n){
if(j==0) j=1;
j=j*2;
i++;
// cout<<"j="<<j<<endl;
}
// cout<<"i="<<i<<endl;
if(n==j)
return 1;
else
n=n-j/2;
// cout<<"n="<<n<<endl;
while(m*m<n)
m++;
if(n==m*m)
k++;
// cout<<"k="<<k<<endl;
}
if(k%2==0)
return 0;
else
return 1;
}  回复  更多评论
  
# re: 有道难题... 2009-06-04 13:53 | NO
public class BinarySequence {

public int getValue(int n) {
int mask = (n ^ (n - 1));
int ret = 0;
int previndex = 0;
while (mask > 0) {
if (check(previndex)) {
ret = 1 - ret;
}
int index = n & mask;
if (index >= n) {
break;
}
previndex = index;

mask = (n & (~mask));
mask = (mask ^ (mask - 1));
}
return ret;
}

static boolean check(int n) {
int a = (int) Math.sqrt(n);
return a * a == n;
}
}

  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理