ぐ追ょ寻っ 发表于 2011-12-6 16:34

一个有趣的数字绕圈问题




上面的图形显示的是将数字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。能否给出一个算法呢?

hopeoflight 发表于 2011-12-7 15:51

正在研究。。。。。

雪凌寒霜 发表于 2011-12-7 19:27

很有趣的问题,有时间一定试试……

kgyl_168 发表于 2011-12-7 23:38

有趣的问题,顶一个!

duoduoqwe 发表于 2011-12-8 23:02

有趣,有时间看卡

dengbin2009 发表于 2011-12-9 11:16

好,以后试试。。。

ylw346799252 发表于 2011-12-10 09:44

有时间 就研究研究0000000

小歪歪 发表于 2011-12-10 18:55

类似快速傅里叶算法

yinbaoli 发表于 2011-12-11 02:17

这个问题的确很有趣,不过时间有点晚了,我就把结论通俗的写出来吧(高中知识完全可以解决)
先把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;

如果我没做错的话,这道题应该是彻底解决了,不知道你满不满意~

锋云天下 发表于 2011-12-11 20:50

有点像折线问题
页: [1] 2
查看完整版本: 一个有趣的数字绕圈问题