讨论 / 本题题解
fjxmlhx 2008-05-03 03:05:00
点我顶贴 收藏 删除
先看格雷码的定义,还不会的继续往下看

先将N转换为二进制,然后从二进制数的最左端扫到二进制数的第二个数:for i:=二进制数的位数 downto 2 do a[i]:=a[i] xor a[i+1];A是存二进制数的数组

最后加个判0就搞定了。。

这道题。。。。搞专业知识

#1 姚斯宇@2008-02-24 08:41:00
回复 删除
好题解!!

感谢大牛。

#2 fjxmlhx@2008-02-25 03:28:00
回复 删除
感谢孤柏大牛~
#3 181818181818@2008-02-27 02:41:00
回复 删除
i-1吧?
#4 181818181818@2008-02-27 02:43:00
回复 删除
看不懂啊!
#5 fjxmlhx@2008-02-27 06:55:00
回复 删除
因为存二进制用的数组是倒序,所以从2进制的位数downto 2其实就是1 to 二进制的位数-1
#6 181818181818@2008-02-28 02:03:00
回复 删除
举个例子吧,还是看不懂
#7 姚斯宇@2008-02-28 02:32:00
回复 删除
比如:6 转为2进制,是1 1 0;

从第二个1,循环到0,一共变两次

由于 1 前面是 1,两者相同,则:

这一位是0。

0前是1,不同,则:

这一位是:1

所以:6————1 0 1;

逆序! 输出:101。

再者:13这个数,转为二进制,是:1101;

循环后三位。

1前是1————0;

0前是1————1;

1前是0————1;

所以变为1011;

逆序,输出1101;

#8 lonelycorn@2008-02-28 06:19:00
回复 删除
一看就是格雷码……但是我不会呀……
#9 Aaron_Kaka@2008-05-03 03:05:00
回复 删除
与我的想法有异曲同工之妙。

不过比我的想法更易于实现。

查看更多回复
提交回复