2009-09-29 2 views
2

В основном у меня есть функция, которая генерирует случайные алфавиты. Я сделал это, используя функцию rand() для генерации чисел, и они преобразовали их в свои соответствующие эквиваленты ascii. , но я хочу, чтобы гласные были сгенерированы в более высоких количествах по сравнению с другими alphabets.ie , если они сгенерированы, говорят, что 10 алфавитов тогда должны быть похожими на 2 o, 3 a и т. Д. как это сделать в vC++ 6,0.генерация случайных алфавитов с некоторыми алфавитами с более высокой частотой появления (vC++ 6.0)

Редактировать: Фактически я делаю scrabble как мой проект колледжа в vC++ 6.0. так под моей доске у меня есть 7 кнопок, на которых я отображающие случайное письмо на each.so, что я хочу, что ..like в царапают мы имеем:

1 point: E ×12, A ×9, I ×9, O ×8, N ×6, R ×6, T ×6, L ×4, S ×4, U ×4 
2 points: D ×4, G ×3 
3 points: B ×2, C ×2, M ×2, P ×2 
4 points: F ×2, H ×2, V ×2, W ×2, Y ×2 
5 points: K ×1 
8 points: J ×1, X ×1 
10 points: Q ×1, Z ×1 

так же, как вы бы выбрать 7 случайных букв из вышеописанный набор, я хочу, чтобы 7 букв генерировались одинаково.

+1

alphabet = письмо?alphabet - набор букв –

ответ

0

придать каждому весу значение. Например. а = 5, б = 5, с = 2, .... д = 1, г = 2 и т.д.

тем выше вес, тем чаще вы хотите письмо появляться

известково случайный букву, добавьте все веса вместе и выберите случайное значение между 0 и общим весом.

затем выберите букву, которая соответствует с нарисованным номером:

как в примере: если вы нарисовали 0-4 вы берете на себя а, если вы нарисовали 5-9 взять б, 10-11 = c и т. д.

+0

Фактически я делаю scrabble как мой проект колледжа в vC++ 6.0. так что у меня на доске у меня есть 7 кнопок, на которых я показываю случайную букву на каждом из них. Я хочу, чтобы это было похоже на то, что .. как в scrabble у нас есть. 1 очко: E × 12, A × 9, I × 9 , O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4 2 точки: D × 4, G × 3 3 балла: B × 2, C × 2 , M × 2, P × 2 4 точки: F × 2, H × 2, V × 2, W × 2, Y × 2 5 баллов: K × 1 8 баллов: J × 1, X × 1 10 баллов: Q × 1, Z × 1 так, как если бы вы выбрали 7 случайных букв из описанного выше набора, я хочу, чтобы 7 букв были созданы таким же образом. – 2009-09-29 11:03:03

0

Тривиальным решением является использование 2 списков. Один с гласными и один с согласными.
Теперь создайте новый алфавит, выбрав N случайных гласных и М случайных согласных, где N> M и N + M = максимальный размер алфавита.

+0

Фактически я делаю scrabble как мой проект колледжа в vC++ 6.0. так что у меня на доске у меня есть 7 кнопок, на которых я показываю случайную букву на каждом из них. Я хочу, чтобы это было похоже на то, что .. как в scrabble у нас есть. 1 очко: E × 12, A × 9, I × 9 , O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4 2 точки: D × 4, G × 3 3 балла: B × 2, C × 2 , M × 2, P × 2 4 точки: F × 2, H × 2, V × 2, W × 2, Y × 2 5 баллов: K × 1 8 баллов: J × 1, X × 1 10 баллов: Q × 1, Z × 1 так, как если бы вы выбрали 7 случайных букв из описанного выше набора, я хочу, чтобы 7 букв были созданы таким же образом. – 2009-09-29 11:04:49

1

Вы можете добавить еще одну функцию rand. F.e. (Извините, это просто псевдокод)

if(rand(0,10) >= 5) { 
    //generate here a vowel at random 
} else { 
    //generate a normal letter or a random letter (including vowel) 
} 

Это произведет гласные в 50:50 шанс, вы можете изменить этот шанс путем изменения 5.

Бобби

+0

На самом деле я делаю scrabble как мой проект колледжа в vC++ 6.0. так что у меня на доске у меня есть 7 кнопок, на которых я показываю случайную букву на каждом из них. Я хочу, чтобы это было похоже на то, что .. как в scrabble у нас есть. 1 очко: E × 12, A × 9, I × 9 , O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4 2 точки: D × 4, G × 3 3 балла: B × 2, C × 2 , M × 2, P × 2 4 точки: F × 2, H × 2, V × 2, W × 2, Y × 2 5 баллов: K × 1 8 баллов: J × 1, X × 1 10 баллов: Q × 1, Z × 1 так, как если бы вы выбрали 7 случайных букв из описанного выше набора, я хочу, чтобы 7 букв были созданы таким же образом. – 2009-09-29 11:04:16

0

Напишу это в псевдокоде. Допустим, у вас есть ваши письма частоты определены:

freq['a'] = 0.2 
freq['b'] = 0.01 
... 
freq['z'] = 0.02 

Сумма всех элементов, очевидно, должно быть 1.

Затем вы можете определить массив с интервалами:

intr['a'] = [0; 0.2) 
intr['b'] = [0.2; 0.01) 
... 
intr['z'] = [0.98; 1) 

Тогда при генерации случайное число n в интервале [0; 1), вам просто нужно пройти через интервальную матрицу и найти, какая буква соответствует этому:

for(letter = 'a' .. 'z') 
    if n in intr[letter] then return letter; 

Массив интервалов также может быть реализован с использованием целых чисел для скорости.

+0

Фактически я делаю scrabble как мой проект колледжа в vC++ 6.0. так что у меня на доске у меня есть 7 кнопок, на которых я показываю случайную букву на каждом из них. Я хочу, чтобы это было похоже на то, что .. как в scrabble у нас есть. 1 очко: E × 12, A × 9, I × 9 , O × 8, N × 6, R × 6, T × 6, L × 4, S × 4, U × 4 2 точки: D × 4, G × 3 3 балла: B × 2, C × 2 , M × 2, P × 2 4 точки: F × 2, H × 2, V × 2, W × 2, Y × 2 5 баллов: K × 1 8 баллов: J × 1, X × 1 10 баллов: Q × 1, Z × 1 так, как если бы вы выбрали 7 случайных букв из описанного выше набора, я хочу, чтобы 7 букв были созданы таким же образом. – 2009-09-29 11:03:33