鱗目界域-龍論壇

游態龍的錫安山。龍的力量、智慧、野性、與優雅

您尚未登录。 (登录 | 注册)

公告

mb 爪機版     |    論壇指南     |    Discord     |    QQ群

《龙魂志》第一期
《龙魂志》第二期

Tips:龙的梦想 龙的故乡

#1 2025-01-04 23:42:59  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

針對第一個問題,我讓chatGPT用python計算了一下結果 [巫師帽] ,結果如下:

首次發生該事件最有可能出現在第 1009次,此時的概率約爲 6.28%。

离线

#2 2025-01-05 01:55:09  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

[↑] @龍爪翻書 寫道:    我也用chatGPT計算了~  但算出來的是1015歲    [開心思考]   (chatGPT思考了2分鐘5秒,印象中我還是第一次遇到思考這麼久的~) …

我檢查了一下,下面的代碼應該沒有錯。並且驗證了最終求和結果也爲1。 [開心思考] 


# 定义发生概率的函数
def occurrence_probability(k):
    if k < 1000:
        return 0  # 前999次发生概率为0
    prob = 1.0
    for i in range(1000, k):  # 计算前 k-1 次未发生的概率
        prob *= (1 - (i - 999) / 100)
        if prob < 1e-10:  # 避免过小的概率
            break
    prob *= (k - 999) / 100  # 第 k 次发生的概率
    return prob

# 计算从第1000次到第1099次首次发生的概率
k_range = range(1000, 1100)
probabilities_range = [occurrence_probability(k) for k in k_range]

# 输出概率列表
for k, prob in zip(k_range, probabilities_range):
    print(f"第 {k} 次的概率: {prob:.10f}")

# 求和验证
total_prob = sum(probabilities_range)
print(f"从第1000次到第1099次的概率总和: {total_prob:.10f}")

輸出的結果爲:


第 1000 次的概率: 0.0100000000
第 1001 次的概率: 0.0198000000
第 1002 次的概率: 0.0291060000
第 1003 次的概率: 0.0376437600
第 1004 次的概率: 0.0451725120
第 1005 次的概率: 0.0514966637
第 1006 次的概率: 0.0564746745
第 1007 次的概率: 0.0600245112
第 1008 次的概率: 0.0621253691
第 1009 次的概率: 0.0628156510
第 1010 次的概率: 0.0621874944
第 1011 次的概率: 0.0603784037
第 1012 次的概率: 0.0575607449
第 1013 次的概率: 0.0539299902
第 1014 次的概率: 0.0496926338
第 1015 次的概率: 0.0450546547
第 1016 次的概率: 0.0402112793
从第1000次到第1099次的概率总和: 1.0000000014

离线

#3 2025-01-05 23:31:39  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

[↑] @羽落 寫道:   1000歲應該是0.001吧?   另外題目中   那麼1000歲死亡概率0.001 1001歲爲0.001+(1001-1000)‰=0.002 1002歲0.002+(1002-1000)‰= …

我犯了一個錯,把題目裏的“‰”看成“%”了。
更正這個錯誤後,最終結果是:

第1031年概率最高,概率爲0.0193839289。

我的思路應該沒有錯誤,由於死亡的事件發生只分布在第1000年至第1999年。
每一年對應的概率計算如下:

第1000次的概率是0.001
第1001次是0.999×0.002
第1002次是0.999×0.998×0.003
第1003次是0.999×0.998×0.997×0.004
......

我學這些已經是很久前了,我不記得這叫什麼分佈了。

總之概率將從第1000年開始逐漸增大,到達峯值後開始逐漸減小。

由於事件必定發生在區間第1000年至第1999年(第1999死亡概率爲1),對此區間上的每一年的概率求和,結果將爲1,可以以此驗證步驟正確性。我已驗證過結果正確性。

具體代碼如下:


# 定义发生概率的函数
def occurrence_probability(k):
    if k < 1000:
        return 0  # 前999次发生概率为0
    prob = 1.0
    for i in range(1000, k):  # 计算前 k-1 次未发生的概率
        prob *= (1 - (i - 999) / 1000)
        if prob < 1e-10:  # 避免过小的概率
            break
    prob *= (k - 999) / 1000  # 第 k 次发生的概率
    return prob

# 计算从第1000次到第1999次首次发生的概率
k_range = range(1000, 2000)
probabilities_range = [occurrence_probability(k) for k in k_range]

# 输出概率列表
for k, prob in zip(k_range, probabilities_range):
    print(f"第 {k} 次的概率: {prob:.10f}")

# 求和验证
total_prob = sum(probabilities_range)
print(f"从第1000次到第1999次的概率总和: {total_prob:.10f}")

离线

#4 2025-01-06 01:12:24  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

[↑] @羽落 寫道:    [疑問]    …

這位龍友需要複習一下條件概率的內容哦,不是這麼算的。 [owo]

离线

#5 2025-01-06 01:20:54  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

[↑] @Anbach 寫道:    這位龍友需要複習一下條件概率的內容哦,不是這麼算的。 [owo] …

不,是我看錯了,不好意思(話說我爲什麼不能編輯帖子)

离线

#6 2025-01-06 01:52:16  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

把坑全部踩了一遍,最後我的結果也是1015,概率爲0.066704

离线

#7 2025-01-06 17:11:31  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

第二個像是我學編程時,書上的作業題。

還是扔給chatGPT寫代碼。


# 动态调整方案代码(将单位从ms转换为s)
# 初始参数
attack = 100  # 初始攻击力
interval = 1.0  # 初始攻击间隔(s)
points = 100  # 升级点数
attack_increase = 1.5  # 每次提升攻击力
interval_multiplier = 0.99  # 每次攻击间隔缩短的比例

# 记录最终分配
attack_upgrades = 0
interval_upgrades = 0

# 动态分配点数
for _ in range(points):
    # 计算两种升级后的DPS
    dps_increase_attack = (attack + attack_increase) / interval
    dps_increase_interval = attack / (interval * interval_multiplier)
    
    # 比较收益,选择收益更高的升级
    if dps_increase_attack > dps_increase_interval:
        attack += attack_increase
        attack_upgrades += 1
    else:
        interval *= interval_multiplier
        interval_upgrades += 1

# 最终DPS
final_dps = attack / interval

# 输出结果
print(f"动态调整:攻击力升级 {attack_upgrades} 次,攻击间隔升级 {interval_upgrades} 次")
print(f"最大DPS为 {final_dps:.2f}")

結果是:


动态调整:攻击力升级 33 次,攻击间隔升级 67 次
最大DPS为 293.15

离线

#8 2025-01-07 00:08:23  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

利用了一點小技巧解決問題3

通過求解單位“幼龍”對最終“太古龍”合成期望的貢獻,最後能輕易求出答案。

仍然是chatGPT編寫的代碼,使用了更精確的數據類型以避免較大誤差:


from decimal import Decimal, getcontext

# 设置高精度
getcontext().prec = 50

def calculate_min_level1_items(target_expectation=Decimal('0.75')):
    # 定义每级物品所需等级1物品数量(用高精度Decimal表示)
    level2_cost = Decimal('4.5')  # 合成1个等级2需要的等级1数量
    level3_cost = level2_cost * Decimal('3')  # 合成1个等级3
    level4_cost = level3_cost * Decimal('3')  # 合成1个等级4
    level5_cost = level4_cost * Decimal('3')  # 合成1个等级5

    # 计算各等级单位等级1物品的贡献
    unit_contribution_level2 = Decimal('1') / level2_cost
    unit_contribution_level3 = Decimal('1') / level3_cost
    unit_contribution_level4 = Decimal('1') / level4_cost
    unit_contribution_level5 = Decimal('1') / level5_cost

    # 计算单位等级1物品对等级5的期望贡献
    total_unit_contribution = unit_contribution_level5

    # 计算所需等级1物品数量
    min_level1_items = target_expectation / total_unit_contribution

    # 返回向上取整的结果(因为物品数量必须为整数)
    return min_level1_items.to_integral_exact(rounding='ROUND_CEILING')

# 调用函数
result = calculate_min_level1_items()
print(f"获得0.75个等级五物品至少需要的等级一物品数量: {result}")

輸出的結果爲:


获得0.75个等级五物品至少需要的等级一物品数量: 92

即需要92只幼龍。

离线

#9 2025-01-07 10:50:34  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

[↑] @Anbach 寫道: 利用了一點小技巧解決問題3  通過求解單位“幼龍”對最終“太古龍”合成期望的貢獻,最後能輕易求出答案。  仍然是chatGPT編寫的代碼,使用了更精確的數據類型以避免較大誤差:     輸出的結果爲: …

我才發現chatGPT怎麼連(2×0.5+3×0.5)×2都能算錯算得4.5,正確結果應該是5。

修正之後的最終結果是


获得0.75个等级五物品至少需要的等级一物品数量: 102

离线

#10 2025-01-07 10:59:44  |  显示全部楼层

Anbach
虺龍
Registered: 2024-12-20
Posts: 16

回应: 2025龍主題數學競賽計劃

[↑] @Anbach 寫道: 利用了一點小技巧解決問題3  通過求解單位“幼龍”對最終“太古龍”合成期望的貢獻,最後能輕易求出答案。  仍然是chatGPT編寫的代碼,使用了更精確的數據類型以避免較大誤差:     輸出的結果爲: …

代碼還是錯的,chatGPT默認只考慮了第一步合成需要計算期望值,不檢查都沒注意到。

應該是這樣:


from decimal import Decimal, getcontext

# 设置高精度

getcontext().prec = 50

def calculate_min_level1_items(target_expectation=Decimal('0.75')):

    # 定义每级物品所需等级1物品数量(用高精度Decimal表示)

    level2_cost = Decimal('5')  # 合成1个等级2需要的等级1数量

    level3_cost = level2_cost * Decimal('5')  # 合成1个等级3

    level4_cost = level3_cost * Decimal('5')  # 合成1个等级4

    level5_cost = level4_cost * Decimal('5')  # 合成1个等级5

    # 计算各等级单位等级1物品的贡献

    unit_contribution_level2 = Decimal('1') / level2_cost

    unit_contribution_level3 = Decimal('1') / level3_cost

    unit_contribution_level4 = Decimal('1') / level4_cost

    unit_contribution_level5 = Decimal('1') / level5_cost

    # 计算单位等级1物品对等级5的期望贡献

    total_unit_contribution = unit_contribution_level5

    # 计算所需等级1物品数量

    min_level1_items = target_expectation / total_unit_contribution

    # 返回向上取整的结果(因为物品数量必须为整数)

    return min_level1_items.to_integral_exact(rounding='ROUND_CEILING')

# 调用函数

result = calculate_min_level1_items()

print(f"获得0.75个等级五物品至少需要的等级一物品数量: {result}")

結果是:


获得0.75个等级五物品至少需要的等级一物品数量: 469

(不能編輯帖子真的好麻煩)💦

离线

论坛页尾