Дано число 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
Листинг программы
  1. var
  2. f:text;
  3. a,d,s,min,i,b,ch:integer;
  4. begin
  5. assign(f,'divisor.in');
  6. reset(f);
  7. readln(f,a);
  8. close(f);
  9. s:=0;
  10. b:=a;
  11. min:=0;
  12. while b>0 do
  13. begin
  14. s:=s+b mod 10;
  15. b:= b div 10;
  16. end;
  17. min:=s;
  18. ch:=a;
  19. s:=0;
  20. for i:=a div 2 downto 1 do
  21.  if a mod i=0 then
  22.  begin
  23.   b:=i;
  24.   while b>0 do
  25.    begin
  26.    s:=s+b mod 10;
  27.    b:= b div 10;
  28.    end;
  29.    if s<min then
  30.    begin
  31.    min:= s;
  32.    ch:=i;
  33.    end;
  34.    s:=0;
  35.   end;
  36. assign(f,'divisor.out');
  37. rewrite(f);
  38. writeln(f,ch);
  39. close(f);
  40. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы