网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月16日漏签0天
vb吧 关注:156,092贴子:1,166,229
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 6回复贴,共1页
<<返回vb吧
>0< 加载中...

求一算法...关于物品兑换的...

  • 取消只看楼主
  • 收藏

  • 回复
  • tzwsoho
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
一楼先给百度....二楼是题目...请教各位高人...


  • tzwsoho
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
有9种动物,分别是:1牛 2猪 3羊 4马 5鹿 6鸡 7鸭 8鹅 9狗
已知它们两两之间的价钱兑换表,比如:
牛-》猪:买入0.824元,卖出0.836元
羊-》猪:买入0.752元,卖出0.783元
牛-》羊:买入1.425元,卖出1.452元
其中买入价即为我要用一头A所值的钱买入一头B所要花的钱,比如一头牛如果值1元,我买猪就只需花0.824元
卖出价即为B值的钱去买A所要用的钱的倒数,比如我原有一头猪,设它值的钱为1元,我要买一头羊的话就要花1/0.783元


2025-08-16 14:22:49
广告
不感兴趣
开通SVIP免广告
  • tzwsoho
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
现在问题是:如果我用牛值的钱,通过“牛-》猪-》羊-》牛”的途径来重新购买一头牛,会不会赚钱(计算方法:0.824*(1/0.783)*(1/1.425),若结果大于1,则我赚钱了)?其他动物也是通过这种办法购买呢?怎样列举每一种办法并且排序输出?
(假设目前我知道了上述九种动物的价钱转换表,且价钱关系是“鹿羊>牛>马>猪>狗>鹅>鸭>鸡”)


  • tzwsoho
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
3 楼应该是“鹿>羊”。。。
下面给出转换表的顺序:
"牛/猪", "狗/牛", "羊/牛", "马/牛", "牛/鹅", "牛/鹿",
"牛/鸡", "牛/鸭", "羊/鹅", "羊/鹿", "羊/猪", "羊/鸭",
"羊/马", "鹅/猪", "鹿/鹅", "鹿/猪", "鹿/鸭", "鸭/鹅",
"鸭/猪", "马/鹅", "马/鹿", "马/猪", "马/鸭", "狗/羊",
"狗/鹅", "狗/鹿", "狗/猪", "狗/鸭", "狗/马", "鸡/鹅",
"鸡/猪", "羊/鸡", "鹿/鸡", "鸭/鸡", "马/鸡", "狗/鸡"
共 36 种,请注意全部都是单向转换的,比如表中只有“马/鸭”,而没有“鸭/马”,后一种动物转换的方法 2 楼已作说明


  • tzwsoho
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
目前我的算法是这样:
Dim i As Long,j As Long, k As Long
Dim Rst As Double, CnvtPath As String, arrFT As Variant
Dim CnvtFrom(35) As Long, CnvtTo(36) As Long, CnvtTbl(8, 8) As Double
'创建动物代码转换表
'因为我的动物价钱表第一个是“牛-》猪”
'而牛的代码是 1,猪的代码是 2(请看 2 楼和 4 楼)
'所以 CnvtFrom(0) = 0,CnvtTo(0) = 1
'即代号减一
CnvtFrom(0) = 0: CnvtTo(0) = 1
CnvtFrom(1) = 8: CnvtTo(1) = 0
CnvtFrom(2) = 2: CnvtTo(2) = 0
CnvtFrom(3) = 3: CnvtTo(3) = 0
CnvtFrom(4) = 0: CnvtTo(4) = 7
CnvtFrom(5) = 0: CnvtTo(5) = 4
CnvtFrom(6) = 0: CnvtTo(6) = 5
CnvtFrom(7) = 0: CnvtTo(7) = 6
CnvtFrom(8) = 2: CnvtTo(8) = 7
CnvtFrom(9) = 2: CnvtTo(9) = 4
CnvtFrom(10) = 2: CnvtTo(10) = 1
CnvtFrom(11) = 2: CnvtTo(11) = 6
CnvtFrom(12) = 2: CnvtTo(12) = 3
CnvtFrom(13) = 7: CnvtTo(13) = 1
CnvtFrom(14) = 4: CnvtTo(14) = 7
CnvtFrom(15) = 4: CnvtTo(15) = 1
CnvtFrom(16) = 4: CnvtTo(16) = 6
CnvtFrom(17) = 6: CnvtTo(17) = 7
CnvtFrom(18) = 6: CnvtTo(18) = 1
CnvtFrom(19) = 3: CnvtTo(19) = 7
CnvtFrom(20) = 3: CnvtTo(20) = 4
CnvtFrom(21) = 3: CnvtTo(21) = 1
CnvtFrom(22) = 3: CnvtTo(22) = 6
CnvtFrom(23) = 8: CnvtTo(23) = 2
CnvtFrom(24) = 8: CnvtTo(24) = 7
CnvtFrom(25) = 8: CnvtTo(25) = 4
CnvtFrom(26) = 8: CnvtTo(26) = 1
CnvtFrom(27) = 8: CnvtTo(27) = 6
CnvtFrom(28) = 8: CnvtTo(28) = 3
CnvtFrom(29) = 5: CnvtTo(29) = 7
CnvtFrom(30) = 5: CnvtTo(30) = 1
CnvtFrom(31) = 2: CnvtTo(31) = 5
CnvtFrom(32) = 4: CnvtTo(32) = 5
CnvtFrom(33) = 6: CnvtTo(33) = 5
CnvtFrom(34) = 3: CnvtTo(34) = 5
CnvtFrom(35) = 8: CnvtTo(35) = 5
'创建价格转换表
'假设价格我已经存放在 arrLng() 数组里面
'比如 arrLng(0) 为“牛-》猪”的买入价 0.824
'而“猪-》牛”的卖出价 0.836 就存放在 arrLng(1)
'“狗-》牛”的买入价存放在 arrLng(2),以此类推...
For i = 0 To 35
CnvtTbl(CnvtFrom(i), CnvtTo(i)) = arrLng(i)
CnvtTbl(CnvtTo(i), CnvtFrom(i)) = 1 / arrLng(i + 1)
Next
'代码-动物对应表
arrFT = Array("牛", "猪", "羊", "马", "鹿", "鸡", "鸭", "鹅", "狗")
'说了那么多,主要问题其实就是下面的代码的执行效率
'三个 FOR 循环,CPU 使用总是居高不下啊~~ =。=!!
For i = 0 To 8
For j = 0 To 8
If i <> j Then
For k = 0 To 8
If (i <> k) And (j <> k) Then '确保三种动物互不相同
Rst = CnvtTbl(i, j) * CnvtTbl(j, k) * CnvtTbl(k, i) '计算结果
CnvtPath = CStr(arrFT(i)) & "-" & CStr(arrFT(j)) & "-" & CStr(arrFT(k)) '动物的转换关系
If Rst > 1 Then '我赚钱了!输出结果
Debug.Print CnvtPath, Rst
End If
End If
Next
End If
Next
Next
'请问各位高人,有没有更好的方法解决这个问题,谢谢!


  • tzwsoho
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
CnvtTbl(CnvtFrom(i), CnvtTo(i)) = arrLng(i) 
CnvtTbl(CnvtTo(i), CnvtFrom(i)) = 1 / arrLng(i + 1) 
上面的代码错了,应该是arrLng(i * 2)和1 / arrLng(i * 2 + 1)


  • tzwsoho
  • 函数调用
    6
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
貌似没人有兴趣....哎....还是老办法吧....


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 6回复贴,共1页
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示