Дано число n. Найдите такой его делитель d - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Скажу честно и прямо, сделайте за меня. Будем говорить, что число a лучше числа b, если сумма цифр a больше суммы цифр числа b, а в случае равенства сумм их цифр, если число a меньше числа b. Например, число 124 лучше числа 123, так как у первого из них сумма цифр равна семи, а у второго — шести. Также, число 3 лучше числа 111, так как у них равны суммы цифр, но первое из них меньше. Дано число n. Найдите такой его делитель d (само число n и единица считаются делителями числа n), что любой другой делитель c числа n лучше, чем d. Входные данные Первая строка входного файла INPUT.TXT содержит целое число n (1 ≤ n ≤ 105000). Выходные данные В выходной файл OUTPUT.TXT выведите ответ на задачу. Примеры INPUT.TXT 10 OUTPUT.TXT 10 ----------------------- INPUT.TXT 239 OUTPUT.TXT 1 P.S. знаю подобное есть в инете, но оно не совсем правильно работает

Решение задачи: «Дано число n. Найдите такой его делитель d»

textual
Листинг программы
var
f:text;
a,d,s,min,i,b,ch:integer;
begin
assign(f,'divisor.in');
reset(f);
readln(f,a);
close(f);
s:=0;
b:=a;
min:=0;
while b>0 do
begin
s:=s+b mod 10;
b:= b div 10;
end;
min:=s;
ch:=a;
s:=0;
for i:=a div 2 downto 1 do
 if a mod i=0 then
 begin
  b:=i;
  while b>0 do
   begin
   s:=s+b mod 10;
   b:= b div 10;
   end;
   if s<min then
   begin
   min:= s;
   ch:=i;
   end;
   s:=0;
  end;
assign(f,'divisor.out');
rewrite(f);
writeln(f,ch);
close(f);
end.

Объяснение кода листинга программы

В данном коде происходит поиск делителя числа n.

  1. Переменная f инициализируется как файл ввода.
  2. Число n считывается из файла в переменную a.
  3. Переменные a, d, s, min, i, b, ch инициализируются как целочисленные.
  4. Закрывается файл ввода.
  5. Переменная s инициализируется как сумма цифр числа n.
  6. Переменная b инициализируется как произведение числа n на 10.
  7. Минимальное значение для переменной s инициализируется как сумма цифр числа n.
  8. Переменная ch инициализируется как число n.
  9. Цикл while начинается.
  10. Переменная s инициализируется как сумма цифр числа n, полученного путем деления числа n на 10.
  11. Переменная b инициализируется как частное числа n на 10.
  12. Цикл while продолжается до тех пор, пока b не станет равным нулю.
  13. Минимальное значение для переменной s обновляется, если сумма цифр числа n, полученного путем деления числа n на 10, становится меньше текущего минимального значения.
  14. Переменная ch обновляется, если текущая сумма цифр числа n становится меньше текущего минимального значения.
  15. Цикл for начинается.
  16. Если число n делится на i без остатка, то переменная b инициализируется как i, и цикл while повторяется до тех пор, пока b не станет равным нулю.
  17. Если цикл for завершается и текущая сумма цифр числа n меньше минимального значения, то минимальное значение обновляется, и переменная ch обновляется.
  18. Цикл for завершается.
  19. Файл вывода переименовывается как divisor.out.
  20. Переменная s инициализируется как 0.
  21. Переменная b инициализируется как 0.
  22. Цикл while начинается.
  23. Переменная s инициализируется как 0, полученная путем деления числа n на 2.
  24. Цикл while продолжается до тех пор, пока b не станет равным нулю.
  25. Если цикл while завершается и текущая сумма цифр числа n меньше минимального значения, то минимальное значение обновляется.
  26. Файл вывода закрывается.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5
Похожие ответы