ПАСКАЛЬ/ 9 КЛАСС Представьте данное число n в виде суммы двух кубов. Входные данные...

0 голосов
73 просмотров

ПАСКАЛЬ/ 9 КЛАСС
Представьте данное число n в виде суммы двух кубов.

Входные данные
Программа получает на вход одно натуральное число n(n <= 1028).<br>
Выходные данные
Программа должна вывести 2 целых неотрицательных числа, сумма кубов которых равна n. Если это невозможно, выведите строку impossible.


Информатика (334 баллов) | 73 просмотров
Дано ответов: 2
0 голосов
Правильный ответ

Var
  n,i,j:integer;
  fexit:boolean;
begin
  Read(n);
  fexit:=false;
  for i:=1 to 10 do begin
    for j:=1 to 10 do
      if i*i*i+j*j*j=n then begin fexit:=true; break end;
    if fexit then break
    end;
  if fexit then Writeln(i,' ',j)
  else Writeln('impossible')
end.

Пример выполнения
637
5 8

(150k баллов)
0

"Оператор break предназначен для досрочного завершения цикла. При его выполнении происходит немедленный выход из текущего цикла и переход к выполнению оператора, следующего за циклом"

0

Из справки по языку

0

я написала такую программу, но она не проходит на сайте (информатикс)

0

и не пройдет. потому что она выдаст для 1008 две пары: 2 10 и 10 2

0

По поводу "проходит - не проходит на сайте" - с этим не сюда. Тут решают задачи, а не выясняют, чего хочет тот или иной сайт. Главное - задача должна быть решена правильно.

0

хорошо, спасибо огромное!

0

Пожалуйста

0

"Да и глупо крутить цикл до n, если любое из пары чисел не может превыcить кубического корня из n" Действительно, мы же не учитываем, что 11^3 больше 1028, его банально не пустит в внешний цикл. А power(j,3)+power(i,3)<=n в внутреннем "нисколько" не сокращает количество шагов относительно вашего полного прохода во всем возможным значениям.

0

10х10=100 проходов максимум до impossible. Для современных процессоров сделать 100 проходов по циклу с таким простым телом - миллисекунды. И нет ни малейшего смысла что-то там выдумывать с алгоритмом, помимо обычного брутфорса.

0 голосов

//PascalABC.NET 3.2 сборка 1318

Var
  n,i,j,resi,resj,flag:integer;
begin
flag:=0;
i:=1;
readln(n);
while power(i,3)  begin
    j:=1;
    while power(j,3)+power(i,3)<=n do<br>      begin
        if power(j,3)+power(i,3)=n then
        begin
          flag:=1;
          resi:=i;
          resj:=j;
          break;
        end;
        inc(j);
      end;
    if flag=1 then break;
    inc(i);
  end;
if flag=1 then writeln(resi,' ',resj,' ',resj,' ',resi) else writeln('impossible');
end.

Пример ввода:
1008                           //2^3+10^3
Пример вывода:
2 10 10 2

(38.6k баллов)