Java的Base2代码查询需要策略

Java的Base2代码查询需要策略,java,algorithm,binary,Java,Algorithm,Binary,有人能找到一个解决这个问题的策略,而不涉及转换为基数2吗?你不必写代码,只要给我一个总体策略就行了 整数 如你所知,奶牛没有手指或拇指,因此不能玩剪刀、布、石头(也称为“石头、布、剪刀”、“Ro、Sham、Bo”和其他许多名字),以便做出任意决定,例如谁先挤奶。他们甚至不会掷硬币,因为用蹄子掷硬币太难了 因此,他们采取了“整数”匹配。第一头牛选择的整数小于20亿。第二头牛也是这样。如果两个数字都是“整数”,第一头牛获胜,否则第二头牛获胜 如果二进制数为零,则称正整数N为“整数” N的表示形式的零

有人能找到一个解决这个问题的策略,而不涉及转换为基数2吗?你不必写代码,只要给我一个总体策略就行了

整数 如你所知,奶牛没有手指或拇指,因此不能玩剪刀、布、石头(也称为“石头、布、剪刀”、“Ro、Sham、Bo”和其他许多名字),以便做出任意决定,例如谁先挤奶。他们甚至不会掷硬币,因为用蹄子掷硬币太难了

因此,他们采取了“整数”匹配。第一头牛选择的整数小于20亿。第二头牛也是这样。如果两个数字都是“整数”,第一头牛获胜,否则第二头牛获胜

如果二进制数为零,则称正整数N为“整数” N的表示形式的零的数量等于或大于1。例如,以二进制形式写入的整数9是1001。1001有两个0和两个1;因此,9是一个整数。整数26是二进制的11010;因为它有两个0和三个1,所以它不是一个整数

显然,将数字转换成二进制需要一段时间,所以 胜利者需要一段时间来决定。贝西想作弊,并认为如果她知道给定范围内有多少个“整数”,她可以作弊


帮她写一个程序,告诉她在输入的包含范围内出现了多少个整数(1我认为你没有理解你的作业。要求说明奶牛不能轻松地解决这些问题,但没有说明你的程序不允许这样做

你的程序应该计算出给定范围内的“四舍五入”数字,如果不转换成二进制,这是很难做到的。我想这就是你的作业实际要求你做的

如果必须避免转换为二进制,还有另一种方法。可以设置大小为16的数组,其中包含以下值:

0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4
表示0到15(含15)之间的数字中的1位数

然后,对给定的数字使用除法和模运算,可以快速得到该数字中的1位(和0位)数

在伪代码中:

def getOneBits (num):
    lookup[] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
    oneBits = 0
    for i = 1 to 8:
        oneBits = oneBits + lookup[num % 16]
        num = num / 16
    return oneBits

xstart = 271828
xend   = 314159
xcount = 0
for i = start to end:
    if getOneBits (i) <= 16:
        xcount = count + 1
print "There are " xcount " round numbers between " xstart " and " xend
def getOneBits(num):
查找[]={0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,3,4};
一位=0
对于i=1到8:
oneBits=oneBits+查找[num%16]
num=num/16
返回1比特
xstart=271828
xend=314159
xcount=0
对于i=从开始到结束:

如果getOneBits(i)为什么不转换为基数2?计算机在内部将其所有数字存储在基数2中,因此不会减慢任何速度。我尝试过转换基数2,但速度太慢(请注意输入范围从1到2000000000)。如果我必须计算所有这些整数并将它们转换为基数2,这将需要很长的时间(超过10秒)。我强烈建议你花一些时间学习离散数学。这是一个带约束的置换问题。谢谢你的想法。我想这会行得通的。