Условие задачи : Найти наименьшее натуральное число сумма цифр которого равна n
Сложность : легкая .
Решение задачи :
Для начала продумаем наше решение. Самое наименьшее число здесь это число которое будет первым, т.е. мы пустим цикл и в нем найдем сумму цифр затем сравним её с суммой которую ввел пользователь.
Допустим нам надо найти наименьшее натуральное число сумма цифр которого равна 3.
Вот мы сделали цикл и первое такое число будет 12 (1 + 2) , дальше 21 (2 + 1) , затем 30 (3 + 0), хоть как наименьшее будет 12. И так для любого числа.
ак только мы найдем число у которого сумма цифр равна n, просто выйдем из цикла и всё.
До начала решения задачи почитайте как найти суммы цифр в числе (тут).
И так погнали, надо подумать какие переменные нам нужны :
- Переменная n.
- Переменная для суммы цифр — summa
- Переменная счетчик для цикла for — i
- Переменная в которой мы будем хранить число у которого будем искать сумму цифр — j
var j , i , n , summa : integer;
Теперь попросим попросим пользователя ввести сумму цифр :
write('Введите сумму чисел <= 27: '); readln(n);
Много чисел брать не будем, если хотите можете взять много, я сделаю от 1 до 27, т.е. цикл у меня будет от 10(1+0) до 999(9+9+9)
for i:=10 to 999 do begin j := i ; summa := 0 ; while j > 0 do begin summa := summa + (j mod 10); j := (j div 10); end; end;
И так, вот мы пустили цикл, в нём мы сразу присвоили j := i , чтобы у нас было число с котором работать, дальше обнулили сумму, если этого не сделать то каждый раз сумма будет увеличиваться. Затем мы просто нашли с помощью цикла while, сумму цифр.
И теперь нам нужно условие которое будет проверять равна ли найденная нами сумма цифр , сумме цифр введенной пользователем :
if summa = n then begin writeln('Наименьшее число : ', i); break; end;
Т.е. если найденная нами сумма цифр равна сумме цифр введенной пользователем, то мы выводим это число и выходим из цикла.
Всё решение задачи Pascal :
uses crt; var j , i , n , summa : integer; begin clrscr; write('Введите сумму чисел : '); readln(n); for i:=10 to 999 do begin j := i ; summa := 0 ; while j > 0 do begin summa := summa + (j mod 10); j := (j div 10); end; if summa = n then begin writeln('Наименьшее число : ', i); break; end; end; readln; end.