Сгенерировать 15 случайных чисел, в каждом из которых есть указанная цифра - C (СИ)
Формулировка задачи:
Сгенерировать 15 случайных чисел, в каждом из которых есть указанная цифра из клавы.
Решение задачи: «Сгенерировать 15 случайных чисел, в каждом из которых есть указанная цифра»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define MAX_DIGITS (6)
#define NUMBERS_NEEDED (15)
int main(void) {
int digit, number, i, j, power;
srand(time(NULL));
printf("Digit: ");
if ( scanf("%d", &digit) != 1 || digit < 0 || digit > 9 )
return 1;
for ( i = 0; i < NUMBERS_NEEDED; ++i ) {
power = (int)pow(10.0, rand() % MAX_DIGITS);
number = 0;
for ( j = (int)pow(10.0, MAX_DIGITS); j; j /= 10 )
number += ( ( j == power ) ? digit : rand() % 10 ) * j;
printf("%d\n", number);
}
return 0;
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со случайными числами и временной меткой
- Определение максимального количества цифр в числе (6), которое будет использоваться в генерации случайных чисел
- Установка количества чисел, которые нужно сгенерировать (15)
- Объявление переменных: digit (цифра), number (число), i (счетчик), j (счетчик), power (мощность)
- Инициализация генератора случайных чисел с помощью текущего времени
- Вывод на экран запроса на ввод цифры
- Проверка корректности ввода. Если ввод некорректен, программа завершается
- Основной цикл, который генерирует и выводит на экран 15 случайных чисел
- Генерация случайной мощности для каждого числа, начиная с 0 и до максимального значения (включительно)
- Инициализация числа, которое будет генерироваться, значением 0
- Основной цикл внутри основного цикла, который генерирует каждую цифру числа, начиная с самой старшей (с наибольшей мощностью) до самой младшей (с наименьшей мощностью)
- Если цифра в текущей позиции равна заданной цифре, то она добавляется в число, умноженная на соответствующую мощность
- После завершения внутреннего цикла, число выводится на экран
- Программа завершается