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
[剧透]

这个问题是在我的论坛“ 拉斯维加斯巫师”中提出并讨论的。