Другие языки программирования и технологии
Пишу программу-лото на с (НЕ с++ или с#). Как сделать, чтобы генерировались случайные числа, кроме уже выпавших?
Лучше с кодом. Можно ссылку на готовое решение.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define N 25
int main() {
int box[N], i, j, n, a = 10, b = 100;
_Bool flag;
srand((unsigned)time(NULL));
if (b - a < N) exit(0);
for (i = 0; i < N; ++i) {
flag = false;
n = a + rand() % (b - a);
for (j = 0; j < i; ++j) {
if (n == box[j]) {
flag = !flag;
break;
}
}
if (flag) --i;
else box[i] = n;
}
for (i = 0; i < N; ++i) printf("%4i", box[i]);
putchar('\n');
getchar();
}
#include <stdlib.h>
#include <time.h>
#include <stdbool.h>
#define N 25
int main() {
int box[N], i, j, n, a = 10, b = 100;
_Bool flag;
srand((unsigned)time(NULL));
if (b - a < N) exit(0);
for (i = 0; i < N; ++i) {
flag = false;
n = a + rand() % (b - a);
for (j = 0; j < i; ++j) {
if (n == box[j]) {
flag = !flag;
break;
}
}
if (flag) --i;
else box[i] = n;
}
for (i = 0; i < N; ++i) printf("%4i", box[i]);
putchar('\n');
getchar();
}
Сгенерируйте массив из идущих подряд чисел и перемешайте в случайном порядке. По сути сделаете то-же самое что происходит в мешке в настоящем лото =)
Реализация достаточно проста и готовое решение не хочу скидывать - ВЫ-же сами пишете. =)
ЗЫЖ В C++ есть готовый метод shuffle/random_shuffle. Просто к слову.
Реализация достаточно проста и готовое решение не хочу скидывать - ВЫ-же сами пишете. =)
ЗЫЖ В C++ есть готовый метод shuffle/random_shuffle. Просто к слову.
Виктор Савин
Но простите, а как будет проверяться, что числа не повторяются?
Именно для твоего конкретного случая
main()
{
int i = 0, k, temp, flag, loto[90] ;
random() ; // инициализируем генератор
while(i < 90) // для всех бочонков
{
temp = rand()%91 ; // формируем случайное значение от 0 до 90
flag = 1 ; // флаг, что значение новое
for(k = 0 ; k < i ; k++) // для всех ранее сгенерированных номеров бочонков
if(temp == loto[k]) { flag = 0 ; break; } // если такое число уже было, то сбрасываем флаг нового значения
if(flag) loto[i++] = temp ; // значение новое, значит добавляем его к бочонкам
}
}
main()
{
int i = 0, k, temp, flag, loto[90] ;
random() ; // инициализируем генератор
while(i < 90) // для всех бочонков
{
temp = rand()%91 ; // формируем случайное значение от 0 до 90
flag = 1 ; // флаг, что значение новое
for(k = 0 ; k < i ; k++) // для всех ранее сгенерированных номеров бочонков
if(temp == loto[k]) { flag = 0 ; break; } // если такое число уже было, то сбрасываем флаг нового значения
if(flag) loto[i++] = temp ; // значение новое, значит добавляем его к бочонкам
}
}
Александр Потапов
Тут помимо того что скорость будет падать ближе к концу очень сильно ещё и поиск в массиве будет замедляться.
Могу только предложить записывать уже выпавшие числа (например в булевский массив), после чего проверять при каждой генерации. Уже выпадало - генерировать заново и т. д.
Похожие вопросы
- как сделать массив из случайных чисел от 1 до 15 (размерность массива 4х4) что бы они не повторялись в VBA????
- Правильно я сделал выработку неповторяющихся случайных чисел в диапазоне N?С интернета брал подпрограммки.
- Файл F генерируется из случайных чисел, размерность которой указывает пользователь. Найти сумму четных и нечетных.
- Есть ли программа способная подогнать случайные числа под нужную сумму
- Генератор Случайных Чисел
- 1.Заполнить массив случайными числами. Вывести элементы массива на экран. Заменить все его минимальные элементы нулями.
- MASM32 случайные числа, , массив
- C++ случайные числа
- Заполните случайными числами в
- Делфи, вывод в мемо случайных чисел без повторов из массива. массив от 1 до 35.