一个有趣的数字绕圈问题
上面的图形显示的是将数字1-2^n(n=1,2,……)依次按顺时针顺序写在一个圆上,每标一个数字间隔一个。现在问的是按这种规则将上述数字1,2,3,……,2^n-1,2^n排好后,对于任意一个给定的k(1<=k<=2^n),跟它相邻的数字为多少?例如,将1,2,3,……,63,64排好后,53前面的那个数为7,后面的为27,20前面的为39,后面的为40。能否给出一个算法呢?
正在研究。。。。。 很有趣的问题,有时间一定试试…… 有趣的问题,顶一个! 有趣,有时间看卡 好,以后试试。。。 有时间 就研究研究0000000 类似快速傅里叶算法 这个问题的确很有趣,不过时间有点晚了,我就把结论通俗的写出来吧(高中知识完全可以解决)
先把k写成二进制形式,具体方法略。
数一下k的二进制数的位数,设为m位;
结论:
若m<n,
(1)k作为10进制数能写成2^n'(n'为正整数)的形式,k的前一数为:2^(n-m)*(2k-1);后一数为2^(n-m)*(2k-1)+1;
(2)否则,k的前一数为:2^(n-m-1)*(2k-1);后一数为2^(n-m-1)*(2k-1)+1;
若m=n,
(1)若k的二进制数的末尾数为“1”,那就从右往左数,计第s位再次出现“1”,那么
k的前一数为:(k-1)/2^s+1/2;后一数为:(k+1)/2;
(2)若k的二进制数的末尾数为“0”,那就从右往左数,计第s位首次出现“1”,那么
k的前一数为:k/2;后一数为:k/2^s+1/2;
如果我没做错的话,这道题应该是彻底解决了,不知道你满不满意~ 有点像折线问题
页:
[1]
2