#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/* ------------------------------------------------------------
Function: generate_number
Purpose: Create one integer with distinct digits, drawn from
a shared pool of available digits. Always returns
a 3-digit integer (leading zeros allowed).
------------------------------------------------------------ */
int generate_number(char *available_digits, int *available_count, int length) {
/* First digit must not be zero */
int i, idx;
char first_digit;
/* Find non-zero digits in the pool */
int non_zero_indices[10];
int nz_count = 0;
for (i = 0; i < *available_count; i++) {
if (available_digits[i] != '0') {
non_zero_indices[nz_count++] = i;
}
}
/* Choose first digit */
idx = non_zero_indices[rand() % nz_count];
first_digit = available_digits[idx];
/* Remove first digit from pool */
for (i = idx; i < *available_count - 1; i++) {
available_digits[i] = available_digits[i + 1];
}
(*available_count)--;
/* Choose remaining digits */
char chosen[4];
chosen[0] = first_digit;
for (i = 1; i < length; i++) {
idx = rand() % (*available_count);
chosen[i] = available_digits[idx];
/* Remove chosen digit */
int j;
for (j = idx; j < *available_count - 1; j++) {
available_digits[j] = available_digits[j + 1];
}
(*available_count)--;
}
/* Convert to integer */
int result = (chosen[0] - '0') * 100 +
(chosen[1] - '0') * 10 +
(chosen[2] - '0');
return result;
}
/* ------------------------------------------------------------
Function: generate_three_distinct_digit_numbers
Purpose: Produce three integers, each with distinct digits,
and no digit repeated across all three numbers.
All numbers are exactly 3 digits long.
------------------------------------------------------------ */
void generate_three_distinct_digit_numbers(int *a, int *b, int *c) {
char digits[10] = {'0','1','2','3','4','5','6','7','8','9'};
int count = 10;
*a = generate_number(digits, &count, 3);
*b = generate_number(digits, &count, 3);
*c = generate_number(digits, &count, 3);
}
/* ------------------------------------------------------------
Main execution
------------------------------------------------------------ */
int main() {
srand((unsigned)time(NULL));
/* Run the generator 5 times */
for (int i = 0; i < 5; i++) {
int n1, n2, n3;
generate_three_distinct_digit_numbers(&n1, &n2, &n3);
printf("(%d, %d, %d)\n", n1, n2, n3);
}
return 0;
}
/*
run:
(617, 923, 480)
(746, 135, 208)
(390, 478, 561)
(582, 614, 907)
(165, 492, 780)
*/