鱗目界域-龍論壇

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

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

公告

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

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

Tips:龙的梦想 龙的故乡

#1 2025-01-05 19:24:41  |  显示全部楼层

羽落
虬龍
Registered: 2024-03-30
Posts: 114
网站

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

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

1000歲應該是0.001吧?

在1000歲時的死亡概率爲1‰

另外題目中

之後每年的死亡概率爲前一年死亡概率+n‰,n爲龍的當前年齡減1000。

那麼1000歲死亡概率0.001
1001歲爲0.001+(1001-1000)‰=0.002
1002歲0.002+(1002-1000)‰=0.004
1003歲0.004+(1003-1000)‰=0.007
可以看出即使是單純的死亡概率也不是線性增加,而代碼裏是:


      prob *= (1 - (i - 999) / 100)

按照我的初步計算,到1045歲(要麼是1046,之前算的記不清了)死亡概率就會超過1。
又算了一下

所以找這個表達式的最大值對應的n就可以了,其中n>1。
原本打算用求導算零點的辦法,但發現這玩意求導找零點太複雜了,所以還是用這個式子加程序解決吧。
上面累乘求積的n-2應該改爲n-1
程序直接丟給ai


def calculate_expression(n):

    product = 1

    for i in range(1,n):  # i從0到n-1

        numerator = 1998 - i**2 + i

        denominator = 2000

        product *= numerator / denominator

        # 當product過小時,忽略以避免精度丟失

        if product < 1e-10:

            product = 0

            break

    return (n**2 - n + 2) / 2000 * product

max_value = 0

best_n = 0

total_probability = 0

# 遍歷n值,解之前的P_n可以解出n的範圍在40多以下,

for n in range(2, 50):

    current_value = calculate_expression(n)

    total_probability += current_value

    if current_value > max_value:

        max_value = current_value

        best_n = n

# 驗證所有概率相加是否爲1

if abs(total_probability + 0.001 - 1) < 1e-6:#加上999歲死亡概率

    print(f"所有概率相加驗證通過,總和爲1。")

else:

    print(f"所有概率相加驗證失敗,總和爲 {total_probability}。")

print(f"最大值出現在 n = {best_n},值爲 {max_value}")

最后修改: 羽落 (2025-01-06 10:32:12)


若有謬誤,務必告知。

离线

#2 2025-01-05 23:48:11  |  显示全部楼层

羽落
虬龍
Registered: 2024-03-30
Posts: 114
网站

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

[↑] @Anbach 寫道:    我犯了一個錯,把題目裏的“‰”看成“%”了。 更正這個錯誤後,最終結果是:  第1031年概率最高,概率爲0.0193839289。  我的思路應該沒有錯誤,由於死亡的事件發生只分布在第1000 …

 [疑問] 

[↑]

之後每年的死亡概率爲前一年死亡概率+n‰,n爲龍的當前年齡減1000。

那麼1000歲死亡概率0.001
1001歲爲0.001+(1001-1000)‰=0.002
1002歲0.002+(1002-1000)‰=0.004
1003歲0.004+(1003-1000)‰=0.007
可以看出即使是單純的死亡概率也不是線性增加。


若有謬誤,務必告知。

离线

#3 2025-01-06 07:14:04  |  显示全部楼层

羽落
虬龍
Registered: 2024-03-30
Posts: 114
网站

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

[↑] @龍爪翻書 寫道:    需要達到:虯龍,發帖數100    [靈感]  

其實50就夠了。
<-- posts<100
---------------
奇怪,我算的結果是

最大值出現在 n = 17,值爲 0.075524169

也就是1016歲,並且概率差的很遠,計算總和爲 1.15395,但是我找不出來是哪出了問題。
找到原因了,累乘求積那裏應該是n-1,原本寫的是n-2。現在結果沒問題了:

所有概率相加驗證通過,總和爲1。
最大值出現在 n = 16,值爲 0.06670382814313602

最后修改: 羽落 (2025-01-06 10:29:34)


若有謬誤,務必告知。

离线

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

羽落
虬龍
Registered: 2024-03-30
Posts: 114
网站

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

2.

感覺就是計算量略大,還是直接丟個ai跑代碼輕鬆。肯定不是因爲我並沒有學過python


def calculate_dps(attr_points_attack, attr_points_interval):
    # 初始攻擊力
    attack_power = 100
    # 初始攻擊間隔(毫秒)
    attack_interval = 1000
    # 總屬性點
    total_attr_points = 100
    # 消耗屬性點增加攻擊力
    attack_power += attr_points_attack * 1.5
    # 消耗屬性點縮短攻擊間隔
    attack_interval *= (0.99 ** attr_points_interval)
    # 每秒攻擊次數
    attacks_per_second = 1000 / attack_interval
    # 每秒傷害
    dps = attack_power * attacks_per_second
    return dps


def main():
    max_dps = 0
    best_attr_points_attack = 0
    best_attr_points_interval = 0
    # 窮舉所有可能的屬性點分配方式
    for i in range(101):
        for j in range(101 - i):
            k = 100 - i - j
            dps = calculate_dps(i, j)
            if dps > max_dps:
                max_dps = dps
                best_attr_points_attack = i
                best_attr_points_interval = j
    print(f"最大每秒傷害爲: {max_dps}")
    print(f"最佳的屬性點分配方案是將 {best_attr_points_attack} 點分配給攻擊力,{best_attr_points_interval} 點分配給攻擊間隔。")


if __name__ == "__main__":
    main()

最后修改: 羽落 (2025-01-06 13:12:08)


若有謬誤,務必告知。

离线

#5 2025-01-07 13:14:00  |  显示全部楼层

羽落
虬龍
Registered: 2024-03-30
Posts: 114
网站

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

看到又是概率題就知道完蛋了[被炸] 
換了好幾個ai,但是不同會話算出來的值差幾千,甚至有小於81的(倒是祕塔爆冷給了個625的期望值,很接近模擬),果然國內這方面還趕不上,最後得老老實實自己算。
一通數學+玄學計算配合模擬程序迭代10000次算出來的629期望值得出最終答案740,和前兩題比感覺底氣嚴重不足......[哭]
EDIT:更正爲1250。反正兩個答案過程都挺玄乎的
EDIT2:更改爲787……
這次就是自己敲的暴力近似了:


#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define CYCLES 300000
#define LIMIT 785

void level_up(int* low_level_list, int* low_level_count, int* high_level_list, int* high_level_count) {
    if (*low_level_count == 3) {
        int a = rand() % 2;
        if (a) {
            high_level_list[*high_level_count] = 1;
            (*high_level_count)++;
            *low_level_count = 0;
        } else {
            *low_level_count -= 2;
        }
    }
}

int main() {
    srand(time(NULL)); // 初始化隨機數種子
    int sum_high = 0;

    for (int i = 0; i < CYCLES; i++) {
        int list_1[3] = {0};
        int list_2[3] = {0};
        int list_3[3] = {0};
        int list_4[3] = {0};
        int list_5[1] = {0};
        int count_1 = 0, count_2 = 0, count_3 = 0, count_4 = 0, count_5 = 0;
        int sum_low = 0;

        while (count_5 != 1) {
            list_1[count_1] = 1;
            count_1++;
            sum_low++;
            level_up(list_1, &count_1, list_2, &count_2);
            level_up(list_2, &count_2, list_3, &count_3);
            level_up(list_3, &count_3, list_4, &count_4);
            level_up(list_4, &count_4, list_5, &count_5);
        }

        if (sum_low < LIMIT) {
            sum_high++;
        }
    }

    printf("total sum=%.6f\n", (double)sum_high / CYCLES);
    return 0;
}

EDIT3:更換爲C語言增強性能並增加迭代數and修正原本代碼的bug。最小值應該是784。

最后修改: 羽落 (2025-01-12 22:27:05)


若有謬誤,務必告知。

离线

#6 2025-01-07 22:01:22  |  显示全部楼层

羽落
虬龍
Registered: 2024-03-30
Posts: 114
网站

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

[↑] @Saphira 寫道:    不知道有沒有程序模擬外的數學方法 [靈感] …

只能算出需要2次合成,5只古龍,後面算不下去了,要是我之前學了量子力學說不定可以。平時基本沒怎麼研究概率統計之類的,如果是雙休日或許還有可能短時間學完並會用,但是現在在學校只能見縫插針……
說是高數不掛科但好像都是高中階段知識啊。 引用不小心點到喜歡了……

最后修改: 羽落 (2025-01-07 22:02:35)


若有謬誤,務必告知。

离线

#7 2025-01-13 18:00:17  |  显示全部楼层

羽落
虬龍
Registered: 2024-03-30
Posts: 114
网站

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

用數學方法算了算,到底是5次合成還是6次合成有點頭疼,5次合成總概率會有點問題,一個情況0.5,另外三個0.25的。

和模擬的數差了一些,還沒想明白是哪出的問題。


若有謬誤,務必告知。

离线

#8 2025-01-13 18:40:18  |  显示全部楼层

羽落
虬龍
Registered: 2024-03-30
Posts: 114
网站

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

莫名感覺龍的幾何會挺不錯的。 [開心思考]


若有謬誤,務必告知。

离线

#9 2025-04-07 21:42:13  |  显示全部楼层

羽落
虬龍
Registered: 2024-03-30
Posts: 114
网站

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

[↑] @龍爪翻書 寫道: 我這次的chatGPT說:「期望消耗」是625隻要達到至少 75% 以上的成功率,需要 700 多隻,它選擇729 這個漂亮的整數 …

試了試deepseek v3 0324結果也是729,很巧合,不過放到我的暴力計算程序裏得出來的是71%概率。


有 1 位朋友喜欢这篇文章:龍爪翻書


若有謬誤,務必告知。

离线

论坛页尾