1 Востаннє редагувалося Betterthanyou (15.07.2016 17:18:22)

Тема: Випадкове число від 3 до 9 без 5

Мені потрібно випадково згенерувати число від 3 до 9 без 5
я вирішив генерувати число з 3 до 8 але коли буде число більше за 4 (тобто 5) то я додаю +1 (я цей спосіб поки що використовую, але не знаю чи правильно я роблю).

Random rand = new Random();
                y = rand.Next(3, 9);
                if (y > 4) y++;

Я також пробував порівнювати чи "у" рівний 6 і додавати 1, але 6 буде появлятися в два рази частіше (замість 5 буде 6 і 6 буде коли згенерується 6)

Random rand = new Random();
                y = rand.Next(3, 10);
                if (y == 5) y++;

Можна ще зробити цикл. Напевно не буває такого випадку що генерується тесаме число більше чим хоча би 3-4 раз, але теоретично раз число генерується випадково воно може співпадати з попереднім безкінечну кількість раз тоді цикл буде безкінечним.

Random rand = new Random();
                do
                {
                    y = rand.Next(3, 10);
                } while (y == 5);

Як правильно згенерувати число з 3 до 9 виключивши 5 ?

2

Re: Випадкове число від 3 до 9 без 5

чо це буде 6 в два рази більше?
там же якщо y>4, то y++, тобто для 6 буде 7

Подякували: Betterthanyou, koala2

3 Востаннє редагувалося Betterthanyou (15.07.2016 17:19:04)

Re: Випадкове число від 3 до 9 без 5

FakiNyan написав:

чо це буде 6 в два рази більше?
там же якщо y>4, то y++, тобто для 6 буде 7

я маю на увазі у другому випадку

тут
Random rand = new Random();
                y = rand.Next(3, 10);
                if (y == 5) y++;

Я вже відредагував, тепер думаю зрозуміло

4

Re: Випадкове число від 3 до 9 без 5

Betterthanyou написав:
FakiNyan написав:

чо це буде 6 в два рази більше?
там же якщо y>4, то y++, тобто для 6 буде 7

я маю на увазі у другому випадку

тут
Random rand = new Random();
                y = rand.Next(3, 10);
                if (y == 5) y++;

Я вже відредагував, тепер думаю зрозуміло

а нащо вам другий випадок? робіть першим

Подякували: leofun011

5 Востаннє редагувалося Betterthanyou (15.07.2016 17:39:58)

Re: Випадкове число від 3 до 9 без 5

Прихований текст
FakiNyan написав:
Betterthanyou написав:
FakiNyan написав:

чо це буде 6 в два рази більше?
там же якщо y>4, то y++, тобто для 6 буде 7

я маю на увазі у другому випадку

тут
Random rand = new Random();
                y = rand.Next(3, 10);
                if (y == 5) y++;

Я вже відредагував, тепер думаю зрозуміло

а нащо вам другий випадок? робіть першим

Я шукаю оптимальне рішення, краще за ці всі.
Скільки я не пробував гуглить нічого не найшов

6 Востаннє редагувалося koala (15.07.2016 17:55:37)

Re: Випадкове число від 3 до 9 без 5

Варіант із додаванням цілком нормальний. Ще можна

y = rand.Next(3, 9);//9 не включаємо
if (y == 5) y=9;//якщо значення з непотрібне, зсуваємо його на невключене

І про всяк випадок - об'єкт rand треба створювати один раз на програму (чи, принаймні, на один тип чисел).

Подякували: Betterthanyou, FakiNyan, leofun013

7

Re: Випадкове число від 3 до 9 без 5

Betterthanyou написав:
Прихований текст
FakiNyan написав:
Betterthanyou написав:

я маю на увазі у другому випадку

тут
Random rand = new Random();
                y = rand.Next(3, 10);
                if (y == 5) y++;

Я вже відредагував, тепер думаю зрозуміло

а нащо вам другий випадок? робіть першим

Я шукаю оптимальне рішення, краще за ці всі.
Скільки я не пробував гуглить нічого не найшов

так а як ви визначаєте оптимальність?

8

Re: Випадкове число від 3 до 9 без 5

Вибір за вами, так чи інакше комп'ютер може генерувати лише псевдовипадкові числа. Тобто теоретично вибір обмежується між поганим і ще гіршим.

9 Востаннє редагувалося koala (15.07.2016 21:06:39)

Re: Випадкове число від 3 до 9 без 5

sasha276 написав:

Вибір за вами, так чи інакше комп'ютер може генерувати лише псевдовипадкові числа. Тобто теоретично вибір обмежується між поганим і ще гіршим.

Для 90% застосувань псевдовипадкові числа зі стандартних генераторів не будуть відрізнятися від дійсно випадкових. Не треба паролі від гаманців ними генерувати і складні математичні теореми методом Монте-Карло перевіряти; ну і казино з реальними грошима погано на них робити. А побудувати випадкову карту для гри чи розставити предмети по згенерованій кімнаті чи там обчислити шкоду, нанесену персонажу комп'ютерної гри - цілком нормально.
А ще цілком можливо за допомогою сучасного комп'ютера генерувати реально випадкові числа, тільки швидкість генерації не дуже висока буде. Втім, звісно, їх можна використовувати для ініціалізації псевдовипадкової послідовності.

Подякували: leofun011

10

Re: Випадкове число від 3 до 9 без 5

koala написав:
sasha276 написав:

Вибір за вами, так чи інакше комп'ютер може генерувати лише псевдовипадкові числа. Тобто теоретично вибір обмежується між поганим і ще гіршим.

Для 90% застосувань псевдовипадкові числа зі стандартних генераторів не будуть відрізнятися від дійсно випадкових. Не треба паролі від гаманців ними генерувати і складні математичні теореми методом Монте-Карло перевіряти; ну і казино з реальними грошима погано на них робити. А побудувати випадкову карту для гри чи розставити предмети по згенерованій кімнаті чи там обчислити шкоду, нанесену персонажу комп'ютерної гри - цілком нормально.
А ще цілком можливо за допомогою сучасного комп'ютера генерувати реально випадкові числа, тільки швидкість генерації не дуже висока буде. Втім, звісно, їх можна використовувати для ініціалізації псевдовипадкової послідовності.

а реально випадкові, то які?

11

Re: Випадкове число від 3 до 9 без 5

FakiNyan написав:
koala написав:
sasha276 написав:

Вибір за вами, так чи інакше комп'ютер може генерувати лише псевдовипадкові числа. Тобто теоретично вибір обмежується між поганим і ще гіршим.

Для 90% застосувань псевдовипадкові числа зі стандартних генераторів не будуть відрізнятися від дійсно випадкових. Не треба паролі від гаманців ними генерувати і складні математичні теореми методом Монте-Карло перевіряти; ну і казино з реальними грошима погано на них робити. А побудувати випадкову карту для гри чи розставити предмети по згенерованій кімнаті чи там обчислити шкоду, нанесену персонажу комп'ютерної гри - цілком нормально.
А ще цілком можливо за допомогою сучасного комп'ютера генерувати реально випадкові числа, тільки швидкість генерації не дуже висока буде. Втім, звісно, їх можна використовувати для ініціалізації псевдовипадкової послідовності.

а реально випадкові, то які?

Пов'язані з якимись фізичними характеристиками. Наприклад, якщо протягом довгого часу (скажімо, хвилини) збирати час пінгів до якогось серверу в Австралії в мілісекундах (а ще краще - в тіках процесора), а потім взяти суму за модулем 2, то такий біт буде випадковим з досить високою якістю. Ще можна такий фокус стосовно температури процесора прокрутити... або часу відповіді твердого диску, якщо звертання до нього йдуть досить часто. Відтворити такі процеси надто складно.

Подякували: FakiNyan1

12

Re: Випадкове число від 3 до 9 без 5

Хоча, звісно, треба прогнати таку послідовність через https://en.wikipedia.org/wiki/Diehard_tests - надто легко потрапити в якусь несподівану визначену послідовність, пов'язану, скажімо, з частотою обертання диска.

Подякували: leofun011

13

Re: Випадкове число від 3 до 9 без 5

koala написав:
sasha276 написав:

Вибір за вами, так чи інакше комп'ютер може генерувати лише псевдовипадкові числа. Тобто теоретично вибір обмежується між поганим і ще гіршим.

Для 90% застосувань псевдовипадкові числа зі стандартних генераторів не будуть відрізнятися від дійсно випадкових. Не треба паролі від гаманців ними генерувати і складні математичні теореми методом Монте-Карло перевіряти; ну і казино з реальними грошима погано на них робити. А побудувати випадкову карту для гри чи розставити предмети по згенерованій кімнаті чи там обчислити шкоду, нанесену персонажу комп'ютерної гри - цілком нормально.
А ще цілком можливо за допомогою сучасного комп'ютера генерувати реально випадкові числа, тільки швидкість генерації не дуже висока буде. Втім, звісно, їх можна використовувати для ініціалізації псевдовипадкової послідовності.

Відрізнятися вони, можливо, і не будуть, але і випадковими вони не стануть. Адже, вони повністю повторюються, хоча і за величезні проміжки, тому якщо дивитись на меленькому відрізку- це справді виглядає як випадковість, тим не менше це не так.
Мабуть, досягнення справді випадкового числа, можливе після знайдення найбільшого арифметичного числа і т.п., тобто неможливо, можна лише обрати кращий варіант, кращу якість.

14

Re: Випадкове число від 3 до 9 без 5

public static int getRand(int excnum)
{
  int i = rnd.Next(3,9);
  while (i == excnum)
  {
    i = rnd.Next(3,9);
  }
  return i;
}

15

Re: Випадкове число від 3 до 9 без 5

Прихований текст
olmovc написав:
public static int getRand(int excnum)
{
  int i = rnd.Next(3,9);
  while (i == excnum)
  {
    i = rnd.Next(3,9);
  }
  return i;
}

і чим ваш код кращий за мій 3 ?

Прихований текст

Можна ще зробити цикл. Напевно не буває такого випадку що генерується тесаме число більше чим хоча би 3-4 раз, але теоретично раз число генерується випадково воно може співпадати з попереднім безкінечну кількість раз тоді цикл буде безкінечним.

Random rand = new Random();
                do
                {
                    y = rand.Next(3, 10);
                } while (y == 5);