2012-06-07 2 views
0

Привет, я вчера задал этот вопрос и был закрыт из-за того, что вас не поняли, поэтому я постараюсь быть более конкретным, поскольку я могу это сделать время. Так вот ситуация.Math Probability with C# - Как получить перечисленное значение 3 разных символов при определенной попытке

1. У меня есть 3-х символов: A, B, C в массив символов, как следующее:

char[] characters = {'A', 'B', 'C'}; 

2. при перечислении всех возможных соответствий этих 3-х символов, которые я получаю, например, следующее:

Text = A 
tries = 1 
indexes = characters[0] 
------------ 
Text = B 
tries = 2 
indexes = characters[1] 
------------ 
Text = C 
tries = 3 
indexes = characters[2] 
------------ 
Text = AA 
tries = 4 
indexes = characters[0] characters[0] 
------------ 
Text = AB 
tries = 5 
indexes = characters[0] characters[1] 
------------ 
Text = AC 
tries = 6 
indexes = characters[0] characters[2] 
------------ 
Text = BA 
tries = 7 
indexes = characters[1] characters[0] 
------------ 
Text = BB 
tries = 8 
indexes = characters[1] characters[1] 
------------ 
Text = BC 
tries = 9 
indexes = characters[1] characters[2] 
------------ 
Text = CA 
tries = 10 
indexes = characters[2] characters[0] 
------------ 
Text = CB 
tries = 11 
indexes = characters[2] characters[1] 
------------ 
Text = CC 
tries = 12 
indexes = characters[2] characters[2] 

3. Теперь, учитывая количество определенной попытки, мы можем получить число индексов в этой конкретной попытке? Смысл, например, при попытке номер 10 при этом попробовать Text был CA (как показано выше), потому что индексы были символами [2] & символов [0]. Итак, есть математическое уравнение, чтобы знать эти номера индексов с числом попыток ?

Спасибо

+2

Я действительно не понимаю, в чем проблема реального мира, которую он пытается решить. Он читается как домашнее задание (и я не понимаю, почему вы отметили его с помощью [tag: вероятность]. Можете ли вы объяснить [то, что вы пробовали] (http://whathaveyoutried.com) уже? – Oded

+0

Почему результат «AA» в 4-х попытках? Не приведет ли это к двум попыткам? –

+1

@JoelRondeau - Из примеров, я думаю, что «пытается» означает # примера (то есть AA является опцией №4) – Oded

ответ

6

мы можем получить число индексов в этом конкретном попробовать

Для любого заданного количества букв вы просто считаете числа в базе-3. Поэтому просто конвертируйте из десятичной базы в базовую-3 и обратно.

Чтобы определить, сколько возможностей существует для меньших длин строк: существует 3^n различных возможных строк длины n, которые используют 3 буквы.

+0

@Mohamed Тарек: Это легче увидеть, если вы начинаете свой массив символов в положении 1 вместо 0. Тогда преобразование п попыток в базе 10 базировать 3 даст индексы напрямую. –

+0

@BlueRaja Используя вашу идею, я смог после некоторого изменения получить точное значение, чтобы преобразовать его правильно. Большое спасибо. –

+0

@JisBen Также ваш комментарий мне тоже помог. Благодарю. –

0

Если значение try меньше, чем 4:

characters[try-1] 

В противном случае:

characters[(try-4)/3], characters[(try-4)%3] 

где % оператор модуль и / является целочисленное деление

Итак, г try == 10 вы получите:

characters[2], characters[1] 

Примечание: как ваши ценности стремятся начать с 1 и индексы начинаются с 0, нам нужно -1 с самого начала

Примечание: из-за способ операция модуля работает, второй индекс может также записать в виде (try-1)%3

+0

Спасибо за ваш ответ, но что означает запятая во втором уравнении? –

+0

@MohamedTarek - Нет конкретного смысла, просто разделяющая два значения – Attila