求算法?

applekiller 2000-08-18 12:01:00
加精
我有A,B,C,D,E,F,G。。。。物体,
他的编码为 A=1,B=2,C=4,D=8,E=16 。。。2的N-1次方
选中几个物体。 得到一个编码的和,如何根据这个和反推出
选中的物体。
如选中A,B,D。 和为11。根据11,求出选中了A,B,D。
我需要VB的代码,请各位高手指教。
...全文
217 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
applekiller 2000-08-22
  • 打赏
  • 举报
回复
其实这个问题是我正编写的销售管理系统中遇到的一个问题。
原本是这样的。每一个产品可以带附件,而附件是有限的,大概有
20中吧,输入时是选择某几种附件,就得到了一个编码,用于查询
库存中是否已有该产品,没有的话,需要改制。为了编程方便,我就
用了这个编码,但查询显示产品信息的时候,我就需要把该编码还原,
一时也没有想到只是位运算。由于该系统9月就要用了,就在这儿贴出来
了,希望能得到帮助。
你们的算法?我看过了,都是可行的。在这儿,我想说声谢谢!
希望以后能互相交流交流。
mimile 2000-08-19
  • 打赏
  • 举报
回复
给你一个最简单的方法,text1是你输入的数,text2是结果
Private Sub Command1_Click()
Dim a As Long
a = Text1.Text
Do Until a = 0
Text2.Text = Text2.Text & Int(Sqr(a)) & " "
a = a - Int(Sqr(a)) ^ 2
Loop
End Sub
shines77 2000-08-19
  • 打赏
  • 举报
回复
Mike的算法不错,mimile的算法更妙,huntout的解释也很正确,
那我来一个递归的算法吧,其实嘴最可恨的人是applekiller,这也叫算法啊??(注:问号,问号)
未必太简单了吧,纯粹就是位运算!!!你是不是未免太。。。了,还是为了抛砖引玉啊??

你要是想搞算法我出一道题给你做!

递归算法如下:
Option Explicit

Private Sub Form_Load()
Dim Summer As Long
Dim RetValue As String
Summer = 15
RetValue = GetBitsMap(Summer)
Me.Print
Me.Print " 十进制:"; Summer
Me.Print
Me.Print " 所选物品(二进制):"; RetValue
End Sub

Function GetBitsMap(ByVal Num As Long, Optional ByVal Index As Long) As String
If Num > 0 Then
If (Num And 1) = 0 Then
GetBitsMap = GetBitsMap + GetBitsMap(Num \ 2, Index + 1)
Else
GetBitsMap = GetBitsMap + Str(Index) + GetBitsMap(Num \ 2, Index + 1)
End If
End If
End Function
huntout 2000-08-18
  • 打赏
  • 举报
回复
不好意思,錯了,11是︰
1011
D BA
huntout 2000-08-18
  • 打赏
  • 举报
回复
其實是一個位運算問題!

將11換算成2進制是

1101
DC A
Mike 2000-08-18
  • 打赏
  • 举报
回复
Value=编码
While Value > 0
i = 1
If (Value Mod 2) > 0 Then
有第 i 号物体
Else
没有第 i 号物体
End If
Value = Value \ 2
i = i + 1
Wend

7,759

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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