請問巫師 #357
使用 1 到 9 中的每個數字各恰好一次,組成三個分數,每個分數的分子為一位數,分母為兩位數,三個分數總和為一。
例如,8/16 + 9/27 + 3/24 滿足所有條件,但總和等於 23/24,而不是 1。
[劇透=答案]5/34 + 7/68 + 9/12 [/劇透]
[劇透=解]
有 permut(9,3)*permut(6,3)*permut(3,3)/fact(3) = 60,480 種可能的排列組合需要排序才能找到答案。我必須承認,我反覆試驗了至少一個小時,卻沒有找到答案。
因此,我編寫了一個程序,對 fact(9) = 362,880 種對這 9 個數字進行排序的方法進行了測試。棘手的部分在於要對這 9 個數字的所有可能排序方式進行排序。以下是使用字典順序排序的方法。
- 將所有九個元素放入一個陣列中,按從低到高的順序排列。
- 找到數組中最後一個元素,使得下一個元素大於它。如果未找到,則退出程式。
- 從步驟 2 的下一個元素開始,找出陣列中大於步驟 2 中的元素的最後一個元素。
- 交換步驟 2 和步驟 3 中陣列中的元素。
- 將陣列中的元素從步驟 2 開始依序反轉,直到最後。
- 返回步驟 2
按照這個過程,你會找到六次正確答案,一次解決所有六種排序三個分數的方法。 [/劇透]
[劇透=代碼]
我編寫了以下程式碼,按字典順序對從 1 到 9 的每個數字進行排序,並測試每個數字是否為解決方案。
無效三分數(無效) { int i,x_max,y_max,temp_array[100],保持,pt; int lex_array[] = { 1,2,3,4,5,6,7,8,9 }; int num_elements = sizeof(lex_array) / sizeof(lex_array[0]); int 計數 = 0; bool 停止 = false; 雙倍tot3; cerr << "元素數量 =\t" << num_elements << "\n"; 做 { 計數++; tot3 = (雙精確度)lex_array[0] / (雙精確度)(10 * lex_array[1] + lex_array[2]); tot3 += (雙精度)lex_array[3] / (雙精度)(10 * lex_array[4] + lex_array[5]); tot3 += (雙精度)lex_array[6] / (雙精度)(10 * lex_array[7] + lex_array[8]); 如果(tot3 == 1.0) { cerr << count << "\t"; cerr << lex_array[0] << "/" << lex_array[1] << lex_array[2] << " + "; cerr << lex_array[3] << "/" << lex_array[4] << lex_array[5] << " + "; cerr << lex_array[6] << "/" << lex_array[7] << lex_array[8] << "\n"; } x_max = -1; 對於(i = 0;i <(num_elements - 1);i ++) { 如果 (lex_array[i] < lex_array[i + 1]) x_max = i; } 如果(x_max> = 0) { y_max = 0; 對於(i = x_max + 1;i < num_elements;i++) { 如果(lex_array[x_max] < lex_array[i]) y_max = i; } 保持 = lex_array[x_max]; lex_array[x_max] = lex_array[y_max]; lex_array[y_max] = 保持; if (x_max + 1 < num_elements - 1) // 反轉 { 對於(i = x_max + 1;i < num_elements;i++) { temp_array[i] = lex_array[i]; } pt = 0; 對於(i = x_max + 1;i < num_elements;i++) { lex_array[i] = temp_array[num_elements - 1 - pt]; 點++; } } } 別的 停止=真; } 當(停止==假)時; }[劇透]
我在Wizard of Vegas論壇上提出並討論了這個問題。
一位男士有一桶10加侖的酒和一個壺。有一天,他取了一壺酒,然後把酒桶加滿水。等酒和水充分混合後,他又取了一壺酒,再次把酒桶加滿水。這樣,酒桶裡的酒和水就等量了。
這個水壺的容量是多少?
[劇透=解]
設 j = 罐子的體積。
第一次裝滿酒壺後,酒壺中剩餘 10 加侖葡萄酒。用水取代葡萄酒後,葡萄酒與整桶葡萄酒的比例為 (10-j)/10。
壺舀出稀釋酒後,桶中剩餘10焦加侖稀釋酒。稀釋酒中純酒的含量可表示為:
(10-j)*((10-j)/10) = 5
(10-j)^2 = 50
j^2 - 20j + 100 = 50
j^2 - 20j + 50 = 0
j = (20 +/- 平方根(400-200))/2
j = (20 +/- 10*sqrt(2))/2
j = 10 +/- 5*sqrt(2)
壺不可能比桶子大,所以我們必須使用負號:
j = 10 - 5*sqrt(2) =~ 約 2.92893218813452 加侖。
[劇透]我在Wizard of Vegas論壇上提出並討論了這個問題。
一枚六面骰子重複擲出,直到總點數達到或超過13。最終點數的平均值、中位數和眾數是多少?
[劇透=答案]平均值=14.690219
中位數 = 14
模式 = 13
[劇透=解]
我不得不用馬可夫鏈來解決這個問題。下表根據左列的累積和顯示了每個最終總數的機率。首先從 13 到 18 的明顯情況開始。然後,對於 0 到 12 的累積和,取下面六個單元格的平均值。
可以在第一行找到初始狀態的機率,其總和為 0。
馬可夫鏈
擲骰子總數 | 十三 | 14 | 15 | 16 | 17 | 18 |
---|---|---|---|---|---|---|
0 | 0.279263 | 0.236996 | 0.192313 | 0.145585 | 0.097371 | 0.048472 |
1 | 0.290830 | 0.230791 | 0.188524 | 0.143842 | 0.097114 | 0.048899 |
2 | 0.293393 | 0.241931 | 0.181893 | 0.139625 | 0.094943 | 0.048215 |
3 | 0.289288 | 0.245178 | 0.193717 | 0.133678 | 0.091410 | 0.046728 |
4 | 0.280369 | 0.242560 | 0.198450 | 0.146988 | 0.086950 | 0.044682 |
5 | 0.268094 | 0.235687 | 0.197878 | 0.153768 | 0.102306 | 0.042267 |
6 | 0.253604 | 0.225827 | 0.193419 | 0.155611 | 0.111500 | 0.060039 |
7 | 0.360232 | 0.193566 | 0.165788 | 0.133380 | 0.095572 | 0.051462 |
8 | 0.308771 | 0.308771 | 0.142104 | 0.114326 | 0.081919 | 0.044110 |
9 | 0.264660 | 0.264660 | 0.264660 | 0.097994 | 0.070216 | 0.037809 |
10 | 0.226852 | 0.226852 | 0.226852 | 0.226852 | 0.060185 | 0.032407 |
11 | 0.194444 | 0.194444 | 0.194444 | 0.194444 | 0.194444 | 0.027778 |
12 | 0.166667 | 0.166667 | 0.166667 | 0.166667 | 0.166667 | 0.166667 |
十三 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
14 | 0.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
15 | 0.000000 | 0.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 |
16 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 0.000000 | 0.000000 |
17 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 | 0.000000 |
18 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 | 1.000000 |
這個問題是在我的論壇“ 拉斯維加斯巫師”中提出並討論的。