Задача взята с сайта www.e-olymp.com
Условие задачи:
Сколько натуральных чисел из промежутка [latex][M,N][/latex] имеют наименьшую сумму цифр ?
Входные данные:
Во входном файле два числа [latex]M[/latex] и [latex]N[/latex], [latex]1\le M\le N\le 1000000[/latex].
Выходные данные:
В выходной файл нужно записать ответ – одно число.
Тесты
№ | M | N | Вывод |
1 | 1 | 100 | 3 |
2 | 2 | 17 | 1 |
3 | 32 | 1024 | 2 |
4 | 1 | 1000000 | 7 |
5 | 10 | 10 | 1 |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) throws java.lang.Exception { int sumMin, counter = 1; Scanner scanner = new Scanner(System.in); int m = scanner.nextInt(); int n = scanner.nextInt(); sumMin = sumOfDigits(m); for(int i = m + 1; i <= n; i++) { if (sumOfDigits(i) < sumMin) { sumMin = sumOfDigits(i); counter = 1; } else if (sumOfDigits(i) == sumMin) counter++; } System.out.println(counter); } public static int sumOfDigits(int a){ int sum = 0; while (a > 0) { sum += a%10; a /= 10; } return sum; } } |
Решение
Для решения данной задачи зададим функцию, которая возвращает сумму чисел вводимого нами числа. После ввода границ необходимого промежутка присваиваем минимальную сумму [latex](sumMin)[/latex] сумме цифр первого числа [latex]M[/latex], счетчик количества элементов с минимальной суммой цифр изначально равен 1. В цикле подсчитываем сумму цифр каждого последующего числа, если найдется число с меньшей суммой цифр, значит теперь эта сумма и является минимальной, присваиваем её значение переменной [latex]sumMin[/latex]. Если же встречаются элементы, сумма цифр которых равна [latex]sumMin[/latex], увеличиваем счетчик. Он и будет количеством натуральных чисел на промежутке, имеющих наименьшую сумму цифр.
Ссылка на полностью засчитанное решение на сайте e-olymp.