请问巫师 #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 |
这个问题是在我的论坛“ 拉斯维加斯巫师”中提出并讨论的。