fork download
  1.  
  2. /*
  3.   Задача: Напишите программу, в которой сначала формируется целое число из N цифр, каждая из которых получается случайно
  4.   (N - натуральное число, не превосходящее 9, задается в программе константой).
  5.   Любая цифра может иметь значение от 1 до 9, а цифры в числе могут повторяться.
  6.   Далее определяет, сколько цифр встречаются в числе только один раз. Затем число и количество цифр выводятся на экран.
  7.   Например, если сформированное число 924322498, выводится число 2.
  8.  
  9.   Программа состоит из четырех функций: generateRandomDigit(), generateNumber(), countUniqueDigits(), deletDigit().
  10.  
  11.   1. generateRandomDigit(): Генерирует случайную цифру от 1 до 9. Использует функцию rand() из stdlib.h.
  12.  
  13.   2. generateNumber(): Генерирует случайное число из N цифр, используя функцию generateRandomDigit().
  14.   Число формируется путем последовательного добавления случайных цифр, умножая каждую на соответствующую степень 10.
  15.  
  16.   3. deletDigit(): Удаляет последнюю цифру числа.
  17.  
  18.   4. countUniqueDigits(): Подсчитывает количество уникальных цифр в переданном числе.
  19.   Алгоритм использует битовую маску checkedDigits для отслеживания уже проверенных цифр.
  20.   Цифры извлекаются последовательно с помощью операций % 10 и /= 10.
  21.   Для каждой цифры подсчитывается количество её вхождений в числе.
  22.   Если количество вхождений равно 1, счётчик уникальных цифр увеличивается.
  23.  
  24.   Основная функция main() инициализирует генератор случайных чисел, вызывает функции generateNumber() и countUniqueDigits(), а затем выводит результат с помощью printf().
  25.  
  26.   */
  27.  
  28. #include <stdio.h>
  29. #include <stdlib.h>
  30. #include <time.h>
  31.  
  32. #define N 9
  33.  
  34. // Функция для генерации случайной цифры от 1 до 9
  35. int generateRandomDigit() {
  36. int digit; // Переменная для хранения сгенерированной цифры
  37. digit = rand() % 9 + 1;
  38. return digit;
  39. }
  40.  
  41. // Функция для генерации случайного числа из N цифр
  42. long long generateNumber() {
  43. long long number = 0; // Сгенерированное число
  44. long long multiplier = 1; // Множитель для построения числа
  45.  
  46. for (int i = 0; i < N; i++) { // Цикл по каждой цифре
  47. int digit = generateRandomDigit(); // Генерируем случайную цифру
  48. number += digit * multiplier; // Добавляем цифру к числу
  49. multiplier *= 10; // Увеличиваем множитель для следующей цифры
  50. }
  51. return number;
  52. }
  53.  
  54. // Функция для проверки уникальности цифры
  55. int ifUniqueDigit(int digit, unsigned int checkedDigits) {
  56. if ((checkedDigits & (1 << digit)) == 0) { // Проверяем, стречалась ли цифра младших разрядах
  57. return 1; // Если не встречалась, счётчик уникальных цифр должен быть увеличен
  58. }
  59. return -1; // Если встречалась, счётчик должен быть уменьшен, поскольку цифра не уникальна
  60. }
  61.  
  62. // Функция для подсчета количества уникальных цифр в числе
  63. int countUniqueDigits(long long number) {
  64. int uniqueCount = 0; // Количество уникальных цифр
  65. unsigned int checkedDigits = 0; // Битовая маска для отслеживания проверенных цифр
  66.  
  67. for (int i = 0; i < N; i++) { // Цикл по каждой цифре числа
  68. int digit = number % 10; // Извлекаем последнюю цифру
  69.  
  70. uniqueCount += ifUniqueDigit(digit, checkedDigits); // Проверяем цифру и изменяем значение счётчика
  71. checkedDigits |= (1 << digit); // Добавляем проверенную цифру в маску
  72. number /= 10; // Удаляем проверенную цифру
  73. }
  74. return uniqueCount;
  75. }
  76.  
  77. int main() { // Инициализация генератора случайных чисел
  78. srand((unsigned)time(NULL));
  79. long long number; // Сгенерированное число
  80. int uniqueDigitsCount; // Количество уникальных цифр в сгенерированном числе
  81.  
  82. number = generateNumber();//Генерируем число
  83. uniqueDigitsCount = countUniqueDigits(number); //Считаем уникальные цифры
  84. printf("Сгенерированное число: %lld, количество уникальных цифр: %d\n", number, uniqueDigitsCount); // Вывод результата
  85. return 0;
  86. }
Success #stdin #stdout 0s 5280KB
stdin
Standard input is empty
stdout
Сгенерированное число: 476653446, количество уникальных цифр: 1