Я столкнулся с этим вопросом об интервью, о котором сообщают, при выполнении некоторого рассмотрения (следующая кавычка является всей информацией, которую я нашел о проблеме):
Учитывая функцию для справедливой монеты, запишите функцию для смещенной монеты, которая возвращает головы 1/n, времена (n параметрический усилитель),
На первый взгляд я записал:
int biased_coin(n) { //0=Tails, 1=Heads
int sum = 0;
if(n==1)
return 1;
for(int i=0;i<n;i++) {
sum += unbiased(); //unbiased returns 0 50% of the time and 1 50% of the time
}
if(sum == 1)
return 1;
return 0;
}
Но это, очевидно, не работает. Для n=4, например, это действительно работает: так как вероятность получения единственной Головы, учитывая 4 броска равняется 4 / (2^4) =1/4. Но для говорят n=3, 3 / (2^3)! =1/3.
Что состоит в том, чтобы реализовать надлежащий путь, что-то вроде этого принимающее Вас не может использовать генератор случайных чисел?
Это не будет легко: веб-браузеры являются крепостями из-за проблем безопасности. Так что довольно трудно получить от JS на веб-странице чего-то за пределами браузера.
Также Qtwebkit не очень открытый API. Самым большим препятствием в вашем случае является то, что он не предлагает вам доступа к DOM, поэтому вы можете заменить только весь HTML.
Следовательно, вам нужно будет исправить и написать много кода для реализации пропущенных API и функций.
Так как был выпущен QT 4.6, существует QWebelement (, см. Документы для примеров), чтобы вы могли, по крайней мере, получить доступ к DOM и изменить его. Это сделает много вещей проще. Я предлагаю решить, кто контролирует браузер: будет ли ваше приложение JavaScript, которое звонит снаружи или является приложением действительно в C ++, и вы используете браузер в качестве Smart UI Renderer?
Гораздо простым способом, чтобы сделать вашу идею Было бы начать внутренний веб-сервер, когда ваше приложение запускается, а затем открыть вид QTWebkit, указывая на URL локального сервера. Затем вы можете использовать все стандартные инструменты веб-разработки. Eclipse использует эту технику для его внутренней справочной системы.
-121--4268567-line-height: normal |
<number>|
<length>|
<percentage>
из Высота линии
<number>
Используемое значение имеет значение, умноженное на размер шрифта элемента. Вычисленное значение такое же, как указанный. В большинстве случаев это является предпочтительным способом установки линии линии без неожиданных результатов в случае наследства.
<percentage>
относительно размера шрифта самого элемента. Вычисленное значение - это процент, умноженный на вычисленный размер шрифта элемента.
-121--2439262-Предполагая:
int fairCoinToss();
Возвращает 1 для головок и 2 для хвостов, написание:
int biasedCoinToss(int n);
, где головки (1) будут отображаться 1 / n времени, когда это должно работать:
int biasedCoinToss(int n) {
if (n == 1) {
return 1; // 1/1 = 1 = always heads
} else if (n == 2) {
return fairCoinToss(); // 1/2 = 50% = fair coint oss
}
int r = random_number(n);
return r == 0 ? 1 : 0;
}
где Random_Number (n)
генерирует справедливое случайное целое число I такое, что 0 <= i
Random_Number (3)
равно 0, 1 или 2. Предполагая, что даже распределение, значение 0 выйдет 1/3 времени.
Конечно, мы не можем использовать родной генератор случайного номера, но мы можем создать один в любом случае. FairCointoss ()
Случайно генерирует 1 или 0. Многократные броски монет могут быть объединены для генерации большего количества. Например:
fairCoinToss() << 1 | fairCoinToss()
будет генерировать:
00 = 0
01 = 1
10 = 2
11 = 3
, что по определению является случайным числом от 0 до 3 (n = 4).
Это нормально, если N - это мощность-2, но это не обязательно. Это достаточно легко, чтобы удовлетворить. Предположим n = 5. В лучшем случае мы можем создать случайное число от 0 до 7. Если вы «Reroll» 5, 6 или 7, пока вы не получите номер в диапазоне от 0 до 4, то у вас есть (не определяется) Случайное число, справедливо распределенное от 0 до 4 включительно, удовлетворяет требованию.
Код для этого выглядит что-то подобное:
int random_number(int n) {
int ret;
do {
int limit = 2;
ret = fairCoinToss();
while (limit < n) {
ret <<= 1;
ret |= fairCoinToss();
limit <<= 1;
}
} while (ret >= n);
return ret;
}
Если вы создаете / откроете объект и позволяете, чтобы он был унаследован, дочерние процессы, которые разрешены для наследства ручек (например, вы можете указать Binherithandles = True
Для CreateProcess) будут иметь копии этих ручков. Эти унаследованные ручки будут иметь одинаковые значения ручки, что и родительские ручки. Так, например:
CreateeeVent
Возвращает ручку на объект события, ручку - это 0x1234
. 0x1234
без необходимости звонить CreateEwent
или OpenEvent
. Например, вы можете пройти значение ручки в командной строке дочернего процесса. Это полезно для неназванных объектов - поскольку они безымянные, другие процессы не могут открыть их. Использование ручки наследования дочерних процессов может получить ручки для неназванных объектов, если вы хотите их.
-121--3107695-Так как большинство значений N не являются полномочиями 2, не может гарантировать вероятность того, что вероятность 1 / n от любого количества бросков монет. Вместо этого вам придется согласиться на то, что приближается к 1/ N к желаемой точности. Но эй, это монета, вообще бросая тебя.
Нарисуйте себе дерево решений с 2 ветками в корне (меченном H и T), затем 2 ветвями на каждом узле (также пометили H и T), пока вы не достигнете достаточного количества узлов листа, чтобы удовлетворить ваши требования к тому, чтобы удовлетворить достаточных требований. Пометьте право (для вас) доля листьев с нужными значениями, например, 1,2,3, если n = 3. Каждый лист затем определяет маршрут из корня, например, Hhthtthhth (или что-то еще). Они определяют последовательность бросок, которые приводят к «3».
Я оставлю кодировку вам.