Найдите ошибку. ( выводит просто большее число )
Найти натуральное число из интервала от a до b с максимальной суммой делителей.
var max,i,j,k,a,b,z:integer;
begin
k:=0;
max:=0;
readln(a,b);
for i:=a to b do
begin
for j:=1 to i do
if (i mod j)=0 then
k:=k+1;
if k>max then
begin
max:=k;
z:=i;
end;
end;
writeln (z);
end.
Ответы
Ответ дал:
0
Ошибки две:
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.
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.
Вас заинтересует
1 год назад
5 лет назад
8 лет назад