Как вывести два случайных не повторяющихся числа в СИ?

Как вывести два случайных не повторяющихся числа в СИ в диапазоне от 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]);
}
→ Ссылка