Задачи по Pascal. Определить количество трехзначных натуральных чисел сумма которых равна S

Задачи по Pascal

Условие задачи: Определить count — количество трехзначных натуральных чисел, сумма которых равна S. Число S задается с клавиатуры (Язык Pascal)

Сложность : средняя .

Как мы будем решать задачу ?

Нам надо найти кол-во трехзначных натуральных чисел,  сумма которых равна S.

Максимальное 3-хзначное число это 999, его сумма равна 27 (9+9+9)

Пример : Мы ввели число 27 и нам программа должна выдать количество чисел сумма которых равна 27, такое число одно  999.

Т.е. нам надо проверить все числа от 100 до 999, и в каждом из этих чисел найти сумму цифр и сравнить с числом которое мы ввели.

Как найти сумму цифр числа вы можете посмотреть здесь , всё подробно рассказано.

Давайте решать :

Первое что нам знать это какие переменные нам нужны :

Из условия мы можем взять три переменные :

  1. count — количество трехзначных натуральных чисел
  2. переменная для суммы цифр числа пусть будет — summa
  3. S — число с которым мы будем сравнивать сумму цифр каждого числа.
  4. Для цикла нам понадобиться переменная i — для цикла for.
  5. Также нам понадобиться переменная в которую мы будем записывать число, в котором мы будем искать сумму цифр.

Но вы всё увидите походу.

Объявим переменные :

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.

cyber
Оцените автора
CyberLesson | Быстро освоить программирование Pascal и C++. Решение задач Pascal и C++
Добавить комментарий