Как вывести два случайных не повторяющихся числа в СИ?
Как вывести два случайных не повторяющихся числа в СИ в диапазоне от 0 до 10?
srand(time(NULL));
int a = rand()%9;
int b = rand()%9;
Здесь числа случайные, но могут повторяться
Ответы (5 шт):
Автор решения: Эникейщик
→ Ссылка
Если не использовать какую-нибудь функцию, которая сама так умеет, то просто проверять а и b на равенство:
int b = rand()%9;
int a = rand()%9;
while (a == b) {
b = rand()%9;
}
Автор решения: Harry
→ Ссылка
Поскольку исправлять предыдущего оратора не хочтся...
int a = rand()%9, b;
while((b = rand()%9)==a);
Автор решения: Akina
→ Ссылка
Генерим первое, любое случайное от 0 до 9. Генерим дополнительное случайное от 1 до 9. Считаем второе случайное как сумма первого и дополнительного по модулю 10. Получаем также число от 0 до 9, причём гарантированно не равное первому случайному.
Т.е. приблизительно (в сях не силён)
int a = rand()%9;
int b = (a + 1 + rand()%8)%9;
Автор решения: AlexGlebe
→ Ссылка
int a = rand()%11; // 0 .. 10
int b = (a + 1 + rand()%10)%11; // 0 .. a - 1 , a + 1 .. 10
Автор решения: ТарасПрогер
→ Ссылка
Длинный вариант:
const int SIZE = 2;
int arr[SIZE];
int alreadyThere;
for (int i = 0; i < SIZE; )
{
alreadyThere = 0;
int newRanomValue = rand() % 10;
for (int j = 0; j < i; j++)
{
if (arr[j]==newRanomValue)
{
alreadyThere = 1;
break;
}
}
if (!alreadyThere)
{
arr[i] = newRanomValue;
i++;
}
}
for (int i = 0; i < SIZE; i++)
{
printf([i]);
}