Условие задачи: Определить count — количество трехзначных натуральных чисел, сумма которых равна S. Число S задается с клавиатуры (Язык Pascal)
Сложность : средняя .
Как мы будем решать задачу ?
Нам надо найти кол-во трехзначных натуральных чисел, сумма которых равна S.
Максимальное 3-хзначное число это 999, его сумма равна 27 (9+9+9)
Пример : Мы ввели число 27 и нам программа должна выдать количество чисел сумма которых равна 27, такое число одно 999.
Т.е. нам надо проверить все числа от 100 до 999, и в каждом из этих чисел найти сумму цифр и сравнить с числом которое мы ввели.
Как найти сумму цифр числа вы можете посмотреть здесь , всё подробно рассказано.
Давайте решать :
Первое что нам знать это какие переменные нам нужны :
Из условия мы можем взять три переменные :
- count — количество трехзначных натуральных чисел
- переменная для суммы цифр числа пусть будет — summa
- S — число с которым мы будем сравнивать сумму цифр каждого числа.
- Для цикла нам понадобиться переменная i — для цикла for.
- Также нам понадобиться переменная в которую мы будем записывать число, в котором мы будем искать сумму цифр.
Но вы всё увидите походу.
Объявим переменные :
uses crt; var count , summa , s , i , j , num : integer; begin write('Введите число <= 27 : '); readln(s); {просим пользователя ввести число} end.
Для начала сделаем цикл который будет искать сумму цифр в числе :
while j > 0 do begin {Делим число на 10 и получаем остаток от деления т.е. крайнюю правую цифру числа} sum := sum + (j mod 10); {Делим число на 10 и получаем целую часть числа т.е. отбрасываем крайнюю правую цифру от числа} j := (j div 10); end;
Теперь если мы этот цикл засунем в цикл for , то у нас уже будет почти готовое решение задачи :
for i:=100 to 999 do begin j := i ; sum := 0 ; while j > 0 do begin sum := sum + (j mod 10); j := (j div 10); end; end;
Заметьте что переменной j мы присваиваем значение i , если бы мы это не сделали , т.е. у нас бы не было переменное j, цикл бы у нас не когда не закончился и вообще бы не чего не выводил.
И каждый раз мы обнуляем сумму, т.к. каждый раз у нас новое число.
Теперь осталось добавить условие
if (sum = s) then begin count := count + 1; writeln(i); end;
Т.е. тут если у нас сумма цифр равна числу которое мы ввели то количество этих чисел увеличиваем и выводим это число .
Вот и всё задача готова :
uses crt; var count , summa , s , i , j , num : integer; begin write('Введите число <= 27 : '); readln(s); {просим пользователя ввести число} for i:=100 to 999 do begin j := i ; sum := 0 ; while j > 0 do begin sum := sum + (j mod 10); j := (j div 10); end; if (sum = s) then begin count := count + 1; writeln(i); end; end; writeln('Количество таких чисел : ', count); readln; end.