Форум » Обработка целых чисел » Задание 17 №77 (А.Г. Минак) » Ответить

Задание 17 №77 (А.Г. Минак)

GasDM: Написал программу для решения этого задания. Количество чисел совпадает с ответом, а число, наиболее близкое к среднему арифметическому значению этих чисел - нет. Прилагаю свое решение: [pre2] Const a = 2020; b = 647038; Var n, kNum : integer; AvNum, Min, nMin : real; function NumWork(n : integer) : boolean; var digits : array [1..6] of byte; c, k, SumD, minD : integer; begin NumWork := False; SumD := 0; MinD := 10; k := 0; While n > 0 do begin inc(k); c := n mod 10; digits[k] := c; SumD := SumD + c; if c < minD then minD := c; n := n div 10; end; if (SumD < 10) and (minD <> digits[k]) and (minD <> digits[k-1]) and (minD <> digits[k-2]) then NumWork := True; end; //основная программа Begin kNum := 0; for n := a to b do begin if NumWork(n) then begin //writeln(n); inc(kNum); AvNum := AvNum + n; end; end; AvNum := AvNum / kNum; //Writeln(AvNum); Write(kNum,' '); min := abs(AvNum - a); nMin := a; for n := a + 1 to b do if abs(AvNum-n) < min then begin min := abs(AvNum - n); nMin := n; end; Writeln(nMin); End. [/pre2] Буду признателен, если укажите на ошибку в программе или поясните, что значит *число, наиболее близкое к среднему арифметическому значению этих чисел* чисел

Ответов - 2

Минак А.Г.: Наиболее близкое имеет минимальный модуль разности со средним арифметическим. [pre2] def f(x): lst_ = [int(a) for a in str(x)] sum_ = sum(lst_) min_ = min(lst_) return sum_ < 10 and min_ not in lst_[:3] k = s = 0 for i in range(2020, 647_039): if f(i): k += 1 s += i sr = s / k k = b = 0 m = float('inf') for i in range(2020, 647_039): if f(i): k += 1 if abs(sr - i) <= m: m = abs(sr - i) b = i print(k, b) [/pre2]

GasDM: Спасибо за ответ. Разобрался. Моя ошибка заключалась в том, что я искал наиболее близкое к среднему арифметическому из ВСЕХ чисел диапазона, а нужно было искать среди тех, которые должны удовлетворять условию. Добавил в код проверку числа и ответ сошелся. [pre2] for n := a + 1 to b do if NumWork(n) and (abs(AvNum-n) < min) then begin min := abs(AvNum - n); nMin := n; end; Writeln('Наиболее близкое по модулю = ',nMin); [/pre2]



полная версия страницы