WOO logo

請問巫師 #357

使用 1 到 9 中的每個數字各恰好一次,組成三個分數,每個分數的分子為一位數,分母為兩位數,三個分數總和為一。

例如,8/16 + 9/27 + 3/24 滿足所有條件,但總和等於 23/24,而不是 1。

Gialmere

[劇透=答案]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 個數字的所有可能排序方式進行排序。以下是使用字典順序排序的方法。

  1. 將所有九個元素放入一個陣列中,按從低到高的順序排列。
  2. 找到數組中最後一個元素,使得下一個元素大於它。如果未找到,則退出程式。
  3. 從步驟 2 的下一個元素開始,找出陣列中大於步驟 2 中的元素的最後一個元素。
  4. 交換步驟 2 和步驟 3 中陣列中的元素。
  5. 將陣列中的元素從步驟 2 開始依序反轉,直到最後。
  6. 返回步驟 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加侖的酒和一個壺。有一天,他取了一壺酒,然後把酒桶加滿水。等酒和水充分混合後,他又取了一壺酒,再次把酒桶加滿水。這樣,酒桶裡的酒和水就等量了。

這個水壺的容量是多少?

Gialmere

10-5*sqrt(2) =~ 2.9289 加侖

[劇透=解]

設 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。最終點數的平均值、中位數和眾數是多少?

Gialmere

[劇透=答案]平均值=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
[劇透]

這個問題是在我的論壇“ 拉斯維加斯巫師”中提出並討論的。