我认为正确答案是1003,有理有据

来源:8-13 划算还是不划算

月明否

2020-04-16

首先,我看了提问区里普遍的答案,挑出一位比较有说服力的同学的答案:

gold = 1
diamond = 0.05 * gold
vit = gold

def DoesItValue():
    l1_jeweller = 0.75 * gold + 8 * diamond
    l3_jeweller = 10 * vit +0.39 * gold +12 *l1_jeweller
    l4_jeweller = 10 * vit + l3_jeweller+(16 * l1_jeweller + 0.897 * gold)/0.4878
    l6_jeweller = 10 * vit +19.75 * gold +12 * l4_jeweller
    if l6_jeweller > 750:
        print('不值得自己合成,'+ '合成金额是:',l6_jeweller)
    else :
        print('值得自己合成,'+ '合成金额是:',l6_jeweller)

DoesItValue()

#输出:不值得自己合成,合成金额是: 914.7409471094709

#注释,我先做的时候也是算出来1300,但是仔细看L3到L4时会发现,L3和体力无论合成成功与否都不会白费,如果合成成功,计入L4成本,没成功则退还。所以只有16个L1和黄金需要除以合成的概率。

来源:提问区,慕仙6277452


第一点:

仔细看L3到L4时会发现,L3和体力无论合成成功与否都不会白费

这里课上没讲,我原来以为原材料和体力都是要作废的。看到这里我将自己的代码重新改了一遍,仅做吐槽。

第二点:

l3_jeweller = 10 * vit +0.39 * gold +12 *l1_jeweller

课上的说明是:

1颗1级石头变成1颗3级石头,需要消耗12颗1级石头

那么问题来了,“变成”,就意味着合成1个3级石头,需要1个1级石头作为原材料,还需要12颗1级石头作为合成材料,总共13颗1级石头。显然这位同学的12颗不足以说服我。

以此类推,合成4级、6级的石头应该也需要原材料。
所以,我算出来的最终答案是1003。

下面附上我的代码:
因为我用的是分层级的项目结构,所以这里贴出package中的value.py价值表文件和calc.py计算函数文件,不会影响阅读

# value.py
'''
    各级资源的价值表,储存各类价值常量
'''

'''
    购买1级石头
'''
l1_gold = 0.75 # 1颗1级石头消耗0.75金
l1_diamond = 8 # 1颗1级石头同时还需要消耗8颗钻石

'''
    1级合成3级
'''
l1_to_l3_amount = 12 # 1颗1级石头变成1颗3级石头,需要消耗12颗1级石头
l1_to_l3_gold = 0.39 # 同时还需要消耗0.39金
l1_to_l3_vit = 10 # 同时还需要消耗10点体力

'''
    3级合成4级
'''
l3_to_l4_amount = 16 # 1颗3级石头变成1颗4级石头,需要消耗16个1级石头
l3_to_l4_gold = 0.897 # 同时还需要消耗0.897金
l3_to_l4_vit = 10 # 同时还需要消耗10点体力
l3_to_l4_rate = 0.4878 # 1颗3级石头变成1颗4级石头,成功概率只有0.4878,并非100%

'''
    4级合成6级
'''
l4_to_l6_st4_amount = 12 # 1颗4级石头变成6级石头,概率100%,需要消耗12颗4级石头
l4_to_16_gold = 19.75 # 同时还需要消耗19.75金
l4_to_16_vit = 10 # 同时还需要消耗10体力

'''
已知1颗6级石头的市场售价为750金,请问是自己合成石头划算还是直接购买划算
其他数据:
    - 1颗钻石diamond 卖出 0.05金
    - 1点体力vit 可以卖出 1金
'''
diamond_to_gold_price = 0.05
vit_to_gold_price = 1

# calc.py
'''
    计算合成各级石头所需的消耗
'''
from value import *
# from .value import *

def l1_to_l3(amount=1):
    '''
        传入所需合成的3级石头的数量,依次返回合成3级石头所消耗的金,钻石,体力
    '''
    cost_gold_per = (1 + l1_to_l3_amount) * l1_gold + l1_to_l3_gold
    cost_diamond_per = (1 + l1_to_l3_amount) * l1_diamond
    cost_vit_per = l1_to_l3_vit

    cost_gold,cost_diamond,cost_vit = cost_gold_per*amount,cost_diamond_per*amount,cost_vit_per*amount
    
    return cost_gold,cost_diamond,cost_vit

def l1_to_l4(amount=1):
    '''
        传入所需合成的4级石头的数量,依次返回合成4级石头所消耗的金,钻石,体力
    '''
    # 考虑1颗3级石头的成本
    cost_gold_per,cost_diamond_per,cost_vit_per = l1_to_l3(1)

    # 考虑l3_to_l4的成本 + 成功概率
    cost_gold_per += (l3_to_l4_amount * l1_gold + l3_to_l4_gold) / l3_to_l4_rate
    cost_diamond_per += (l3_to_l4_amount * l1_diamond) / l3_to_l4_rate
    cost_vit_per += l3_to_l4_vit

    cost_gold,cost_diamond,cost_vit = cost_gold_per*amount,cost_diamond_per*amount,cost_vit_per*amount
    
    return cost_gold,cost_diamond,cost_vit

def l1_to_l6(amount=1):
    '''
        传入所需合成的6级石头的数量,依次返回合成6级石头所消耗的金,钻石,体力
    '''
    # 考虑1颗4级石头的成本+l4_to_l6的成本
    cost_gold_per = l1_to_l4(1 + l4_to_l6_st4_amount)[0] + l4_to_16_gold
    cost_diamond_per = l1_to_l4(1 + l4_to_l6_st4_amount)[1]
    cost_vit_per = l1_to_l4(1 + l4_to_l6_st4_amount)[2] + l4_to_16_vit
    
    cost_gold,cost_diamond,cost_vit = cost_gold_per*amount,cost_diamond_per*amount,cost_vit_per*amount
    
    return cost_gold,cost_diamond,cost_vit

def convert(amount=1,level=6):
    '''
        传入所需合成的石头级别与数量,换算合成该级石头所消耗的资源(统一换算为金币),结果返回最后换算的金币值
    '''
    if level == 6:
        resource_per = l1_to_l6(1)
    elif level == 4:
        resource_per = l1_to_l4(1)
    elif level == 3:
        resource_per = l1_to_l3(1)
    elif level == 1:
        ans_gold = l1_gold + l1_diamond * diamond_to_gold_price
        return ans_gold
        
    cost_gold_per,cost_diamond_per,cost_vit_per = resource_per
    ans_gold_per = cost_gold_per + cost_diamond_per*diamond_to_gold_price + cost_vit_per*vit_to_gold_price
    ans_gold = ans_gold_per*amount
    return ans_gold


# print('l1_gold:',convert(level=1))
# print('l3_gold:',convert(level=3))
# print('l4_gold:',convert(level=4))
# print('l6_gold:',convert(level=6))
写回答

2回答

飞翔的光少

2020-08-12

哈哈哈,那个体力归还的应该讲了吧

1
0

7七月

2020-04-16

L3到L4肯定是材料和体力都作废啊,不然这个概率有啥意义?失败一次,材料和体力都归还?

那这个概率有何意义。

0
1
kurio
这位同学应该说的是课程上讲3级合成4级时,如果失败则扣除金和16个1级石头,但不消耗体力(课程上确实是说失败不消耗体力的)。 除开这个我也有同样的疑问,就是算出914左右答案的基础是1级合3级总共消耗的是12个1级石头,以及4级合6级总共消耗的是12个4级石头。 但问题是,不需要把那个被合成的基底石头也算进消耗中么? 正确的不应该是1级合3级总共消耗的是13个1级石头,4级合6级总共消耗的是13个4级石头吗?
2020-05-09
共1条回复

Python3.8系统入门+进阶 (程序员必备第二语言)

语法精讲/配套练习+思考题/原生爬虫实战

14447 学习 · 4438 问题

查看课程