Ошибки две: 1) Не забывайте обнулять переменную k. У вас она не обнулялась, и так как каждый раз прибавлялось что-то, то максимум достигался на последнем числе. 2) Нужно не количество, а сумма делителей, поэтому к k надо прибавлять не 1, а i.
Пример исправленной программы:
var max, i, j, k, a, b, z: integer;
begin max := 0; readln(a, b); for i := a to b do begin k := 0; for j := 1 to i do if (i mod j) = 0 then k := k + j; if k > max then begin max := k; z := i; end; end; writeln(z); end.
mskatrinmadness
11.01.2022
1. Современное, короткое и быстрое решение
// PascalABC.NET 3.2, сборка 1417 от 28.03.2017 // Внимание! Если программа не работает, обновите версию!
begin var a:=ArrRandom(16,-20,80); a.Println; Writeln('S=',a.Where((x,i)->i.IsOdd).Sum) end.
2. А вот так все еще учат в большинстве школ (стиль образца 70-80х годов века)
const n=16; var i,s:integer; a:array[1..n] of integer; begin Randomize; s:=0; for i:=1 to n do begin a[i]:=Random(101)-20; Write(a[i],' '); if i mod 2=0 then s:=s+a[i] end; Writeln; Writeln('S=',s) end.
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
нужна Пропускная некоторого канала связи равна 16000 бит/сек. Сколько времени займет передача файла объемом 32000 байт?
1) Не забывайте обнулять переменную k. У вас она не обнулялась, и так как каждый раз прибавлялось что-то, то максимум достигался на последнем числе.
2) Нужно не количество, а сумма делителей, поэтому к k надо прибавлять не 1, а i.
Пример исправленной программы:
var
max, i, j, k, a, b, z: integer;
begin
max := 0;
readln(a, b);
for i := a to b do
begin
k := 0;
for j := 1 to i do
if (i mod j) = 0 then
k := k + j;
if k > max then
begin
max := k;
z := i;
end;
end;
writeln(z);
end.