Конечно! Ниже представлен подробный разбор задачи и решение на языке C++ с комментариями. Задача включает в себя создание трех функций и их использование для анализа чисел на интервале [a, b].
Шаг 1. Описание задач функций
bool IsCorrect(int n1, int n2)
Определяет, является ли интервал [n1, n2] корректным.
Обычно, интервал считается корректным, если n1 ≤ n2.
bool DigitEven(int n)
Проверяет, что все цифры числа чётные (0, 2, 4, 6, 8).
bool HasRep(int n)
Проверяет, что все цифры числа одинаковые.
Шаг 2. Реализация функций
#include <iostream>
using namespace std;
// Проверка корректности интервала
bool IsCorrect(int n1, int n2) {
return n1 <= n2;
}
// Проверка, что все цифры числа четные
bool DigitEven(int n) {
n = abs(n); // Для корректной работы с отрицательными числами
if (n == 0) return true; // 0 — четная цифра
while (n > 0) {
int digit = n % 10;
if (digit % 2 != 0) {
return false;
}
n /= 10;
}
return true;
}
// Проверка, что все цифры числа одинаковые
bool HasRep(int n) {
n = abs(n); // Обработка отрицательных чисел
int firstDigit = n % 10;
while (n > 0) {
int digit = n % 10;
if (digit != firstDigit) {
return false;
}
n /= 10;
}
return true;
}
Шаг 3. Основная программа
Задача:
На интервале [a, b] подсчитать:
- Количество чисел, в которых все цифры одинаковые (
HasRep)
- Проверить, все ли цифры четные (
DigitEven)
Шаг 4. Полный код с примером использования
#include <iostream>
using namespace std;
// Проверка интервала
bool IsCorrect(int n1, int n2) {
return n1 <= n2;
}
// Проверка, что все цифры четные
bool DigitEven(int n) {
n = abs(n);
if (n == 0) return true; // 0 — четная цифра
while (n > 0) {
int digit = n % 10;
if (digit % 2 != 0)
return false;
n /= 10;
}
return true;
}
// Проверка, что все цифры одинаковые
bool HasRep(int n) {
n = abs(n);
int firstDigit = n % 10;
while (n > 0) {
int digit = n % 10;
if (digit != firstDigit)
return false;
n /= 10;
}
return true;
}
int main() {
int a, b;
cout << "Введите диапазон [a, b]: ";
cin >> a >> b;
if (!IsCorrect(a, b)) {
cout << "Некорректный интервал." << endl;
return 1;
}
int countHasRep = 0;
int countAllEven = 0;
for (int i = a; i <= b; ++i) {
if (HasRep(i))
countHasRep++;
if (DigitEven(i))
countAllEven++;
}
cout << "Количество чисел, в которых все цифры одинаковые: " << countHasRep << endl;
cout << "Чисел, в которых все цифры четные: " << countAllEven << endl;
// Дополнительно можно проверить, есть ли числа с обоими свойствами
int countBoth = 0;
for (int i = a; i <= b; ++i) {
if (HasRep(i) && DigitEven(i))
++countBoth;
}
cout << "Количество чисел, где все цифры одинаковые и все четные: " << countBoth << endl;
return 0;
}
Итоги:
- В программе проверяется корректность интервала.
- Для каждого числа на интервале проверяются функции
HasRep и DigitEven.
- Итоговые подсчеты выводятся пользователю.
Если нужно, я могу помочь дополнительно с расширением или объяснениями каждого шага!