WOO logo

Спросите Волшебника #357

Используя каждую цифру от 1 до 9 ровно один раз, составьте три дроби, каждая из которых имеет одну цифру в числителе и две цифры в знаменателе, причем сумма этих трех дробей равна единице.

Например, 8/16 + 9/27 + 3/24 удовлетворяет всем условиям, за исключением того, что сумма равна 23/24, а не 1.

Gialmere

5/34 + 7/68 + 9/12

[spoiler=Решение]

Чтобы найти ответ, нужно перебрать 6,3,3,3,3,3 и перебрать 3 = 60 480 возможных перестановок. Должен признать, я пытался решить задачу методом проб и ошибок не более часа, но так и не нашел решения.

Итак, я написал программу для перебора всех фактов (9) = 362 880 способов упорядочить девять цифр и протестировал все из них. Самая сложная часть заключалась в том, чтобы перебрать все возможные способы упорядочить девять чисел. Вот как это сделать, используя лексографическую сортировку.

  1. Поместите все девять элементов в массив, расположив их от наименьшего к наибольшему.
  2. Найдите последний элемент в массиве, такой что следующий элемент будет больше. Если таких элементов не найдено, завершите программу.
  3. Начиная с элемента, следующего за элементом из шага 2, найдите последний элемент в массиве, который больше элемента из шага 2.
  4. Поменяйте местами элементы массива из шагов 2 и 3.
  5. Переверните элементы массива, начиная с шага 2 и до конца.
  6. Вернитесь к шагу 2.

Следуя этой процедуре, вы найдете правильный ответ шесть раз, по одному разу для всех шести способов упорядочивания трех дробей.

[spoiler=Код]

Я написал следующий код для сортировки каждой цифры от 1 до 9 в лексикографическом порядке и проверки каждого из них на предмет правильности решения.


void three_fraction(void)
{
 int i, x_max, y_max, temp_array[100], hold, pt;
 int lex_array[] = { 1,2,3,4,5,6,7,8,9 };
 int num_elements = sizeof(lex_array) / sizeof(lex_array[0]);
 int count = 0;
 bool stop = false;
 double tot3;
 cerr << "Количество элементов =\t" << num_elements << "\n";
 делать
 {
  count++;
  tot3 = (double)lex_array[0] / (double)(10 * lex_array[1] + lex_array[2]);
  tot3 += (double)lex_array[3] / (double)(10 * lex_array[4] + lex_array[5]);
  tot3 += (double)lex_array[6] / (double)(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;
  for (i = 0; i < (num_elements - 1); i++)
  {
   если (lex_array[i] < lex_array[i + 1])
    x_max = i;
  }
  если (x_max >= 0)
  {
   y_max = 0;
   for (i = x_max + 1; i < num_elements; i++)
   {
    если (lex_array[x_max] < lex_array[i])
     y_max = i;
   }
   hold = lex_array[x_max];
   lex_array[x_max] = lex_array[y_max];
   lex_array[y_max] = hold;
   если (x_max + 1 < num_elements - 1) // обратное преобразование
   {
    for (i = x_max + 1; i < num_elements; i++)
    {
     temp_array[i] = lex_array[i];
    }
    пт = 0;
    for (i = x_max + 1; i < num_elements; i++)
    {
     lex_array[i] = temp_array[num_elements - 1 - pt];
     пт++;
    }
   }
  }
  еще
   стоп = true;
 } while (stop == false);
}
[/спойлер]

Этот вопрос задаётся и обсуждается на моём форуме, посвящённом игре Wizard of Vegas .

У одного человека была 10-галлонная бочка с вином и кувшин. Однажды он налил кувшин вина, а затем долил в бочку воды. Позже, когда вино и вода хорошо перемешались, он налил еще один кувшин и снова долил в бочку воды. В итоге в бочке оказалось равное количество вина и воды.

Каков был объём кувшина?

Gialmere

10-5*sqrt(2) =~ 2,9289 галлонов

[spoiler=Решение]

Пусть j = объем кувшина.

После первого наполнения кувшина в нем осталось 10-j галлонов вина. После того, как вино было заменено водой, соотношение вина ко всему объему кега составило (10-j)/10.

После того, как из кувшина отчерпнули разбавленное вино, в кеге осталось 10-j галлонов разбавленного вина. Количество чистого вина в разбавленном вине можно выразить следующим образом:

(10-j)*((10-j)/10) = 5

(10-j)^2 = 50

j² - 20j + 100 = 50

j² - 20j + 50 = 0

j = (20 +/- sqrt(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

[spoiler=Решение]

Для этого мне пришлось использовать цепь Маркова. В следующей таблице показана вероятность каждого итогового значения в зависимости от суммы, указанной в левом столбце. Начнем с очевидных случаев для сумм от 13 до 18. Затем, для сумм от 0 до 12, возьмем среднее значение шести ячеек ниже.

Вероятности для начального состояния, сумма которых равна 0, можно найти в первой строке.

Цепь Маркова

Сумма роллов 13 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
13 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
[/спойлер]

Этот вопрос задаётся и обсуждается на моём форуме " Волшебник из Вегаса" .