Форум «Всё о Паскале» _ Задачи _ незнаю как назвать
Автор: compiler 24.03.2007 23:02
Найдите все трёхзначные числа, равные сумме кубов своих цифр. я думаю начинать надо с abc=100a+10b+c
заранее благодарен
Добавлено через 1 мин. моя программа
var a,b,c,n:integer; procedure q( var i,n:integer); Begin while n<>0 do begin i:=number mod 10; n:=n div 10; End; end; Begin for n:=99 to 1000 Do begin
a:=q(a,n); b:=q(b,n); c:=q(c,n); if (n=a*a*a+b*b*b+c*c*c) then writeln(n); end; read(a); end.
Автор: klem4 24.03.2007 23:06
Код
for i := 1 to 9 do for j := 0 to 9 do for k := 0 to 9 do begin T := i*100 + j * 10 + k; if i*i*i + j*j*j + k*k*k = T then writeln(T); end;
Автор: compiler 24.03.2007 23:06
что значит <<Illegal assignment to for-loop variable "n">>
Автор: klem4 24.03.2007 23:08
Цитата
что значит <<Illegal assignment to for-loop variable "n">>
По ходу ты в своей проге передаешь переменную цикла FOR как VAR параметр и пытаешься ее изменить в подпрограмме, нельзя так ...
Автор: compiler 24.03.2007 23:15
Цитата(klem4 @ 24.03.2007 19:08)
По ходу ты в своей проге передаешь переменную цикла FOR как VAR параметр и пытаешься ее изменить в подпрограмме, нельзя так ...
а почему так не работает ошибка <<Incompatible types: got "untyped" expected "SmallInt">>
var a,b,c,n:SmallInt; procedure q( i,n:SmallInt); Begin while n<>0 do begin i:=n mod 10; n:=n div 10; End; end; Begin a:=0; b:=0; c:=0; for n:=99 to 1000 Do begin a:=q(a,n); b:=q(b,n); c:=q(c,n); if (n=a*a*a+b*b*b+c*c*c) then writeln(n); end; read(a); end.
PS поставь пожалуйста коментарии к своей проги, я непонял с циклами...
Автор: klem4 24.03.2007 23:22
По поводу твоей проги
Цитата
а почему так не работает ошибка <<Incompatible types: got "untyped" expected "SmallInt">>
Ты еще пытаешься переменной присвоить значение которое возвращает .... процедура, а она ничего не возвращает, потомучто она не функция
А в приведенном мной коде все просто: Вместо того чтобы перебирать все числа от 100 до 999 и разбивать каждое на цифры, что ты пытаешься сделать, проще сделать 3 цикла, переменная первого цикла - первая цифра числа, второго - вторая, третьего - третья. Таким образом мы перебираем все возможноы комбинации от 100 до 999, в теле 3-го цикла, мы получаем значение числа с такими цифрами
Первая цифра умноженная на 100 + Вторая * 10 + Третья
В первой итерации это будет
1 * 100 + 0 * 10 + 0 = 100 И смотрим, равна ли она сумме кубов 1*1*1 + 0*0*0 + 0*0*0