请教一个简单算法。

blacksatan 2001-02-08 10:32:00
有2,4,8,16四个数,如何判断一个数X是其中哪几个数的和呢?(X必为其中一个或多个数的和)

例如:X=28,28=4+8+16,即28为4,8,16三个数的和。

小弟只会用笨方法,列出它们所有和,放入集合中,然后判断这个数是否其中,可扩展性极差,假如再添加一个数32,再要小弟列出集合就要疯了,请教大家有无好的算法?
...全文
156 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Smile_Tiger 2001-02-08
  • 打赏
  • 举报
回复
因为你提供的四个数正好是2的倍数,所以求X的二进制形式,对应位上为0表示没该数,为1表示有。
例如:28的二进制形式为 b11100,所以它是 1 * 16 + 1 * 8 + 1 * 4 + 0 * 2 + 0 * 1

另外因为没有1,所以2,4,8,16只能组合成 2--30之间的偶数

求二进制形式的方法可以用除2取余法








friendkey 2001-02-08
  • 打赏
  • 举报
回复
把X转换为二进制数,看看哪位是1,就有相应的数字。如:28转换为二进制为11100,从低到高第3、4、5位是1,那么它就是2^(3-1)+2^(4-1)+2^(5-1)=28。也就是说,第N位是1,则加数中就有2的N-1次方。

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧