1. Pascal / Говнокод #4403

    +97

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    Program zadacha; 
    var 
       i,chislo,x,y,m,n:integer; 
    begin 
       while i<1 do begin 
       for x:=0 to chislo do begin 
       for y:=0 to chislo do begin 
       for m:=0 to chislo do begin 
       for n:=0 to chislo do begin 
       if (chislo=x*x*x+y*y*y) and (chislo=m*m*m+n*n*n) and (x<>m) and (x<>y) and (y<>m) and (y<>n) then i:=1 else chislo:=chislo+1; 
       end; 
       end; 
       end; 
       end; 
       end; 
       Writeln(chislo); 
    end.

    Вот так находят "минимальное натуральное число представимое двумя различными способами в виде суммы кубов двух натуральных чисел"

    Запостил: kolhoz, 20 Октября 2010

    Комментарии (18) RSS

    • что курил аффтар?
      лаба, но какая...
      Ответить
    • брутфорс брутален
      Ответить
      • завидев лабу рука потянулась к минусу. но узрев сию тупизну не буду сагать.

        когда нужно написать быстро и нет времени думать как лучше, то можно и так писать.
        это ж лаба, ёпта.
        Ответить
    • Writeln(chislo);

      Убило напрочь...
      Ответить
    • типичная реализация "в лоб".
      Ответить
    • В коде чего-то не хватает.
      chislo, i, чему они равны? Да и где изменение i внутри цикла?
      Ответить
      • учимся скроллить горизонтально, там
        ... then i:=1 else chislo:=chislo+1;
        Ответить
        • В любом случае ни chislo, ни i не инициализированы.
          Автор, конечно, надеется на то,что они будут = 0, но тогда не ясно с циклами:
          for x:=0 to chislo do
          От 0 до 0 что ли... Т.е. все равно чего-то не хватает.
          Ответить
          • а, это, ну мне тоже странным показалось
            Ответить
          • > От 0 до 0 что ли...

            Да. То есть пройдет 1 виток цикла.
            Паскалевский цикл
            for n:=0 to chislo do
            тоже что на Си
            for(n=0; n<=chislo; n++)

            Но мне еще интересно, почему бы вместо i: integer; не использовать i: boolean;
            И, по моему, лучше явно определять начальные значения переменных.
            Ответить
            • отнюдь, на самом деле всё совсем не так, паскалевый for это чистый рекуррентный матан и совершенно не похож на сишный for
              для I ∈ [L, M]
              for I := L to M do ...
              for (int N = M - L + 1, I = L; N > 0; --N; I = M - N + 1) ...

              т.е. a) кол-во итераций предвычисляется b) запись в счетчик не имеет смысла c) проверка условия в каждой итерации отсутствует

              это как бы к экспонату не относится, но матчасть надо знать
              Ответить
              • скорее
                for (int N = M - L + 1, I = L; N > 0; --N, ++I) ...

                В смысле "запись в счетчик не имеет смысла"?
                Ответить
                • нельзя присваивать счетчик цикла for в теле, так задумано
                  даже если хакнуть то в начале итерации получит правильное значение а не инкрементируется
                  Ответить
                • В том смысле, что внутри цикла for счетчик доступен только для чтения.
                  Ответить
              • нет, вру, так:
                I = L;
                for (int N = M - L + 1; N > 0; --N, ++I) ...
                Ответить
    • вот для таких аффтаров и нужен супер-компутер, который
      (с) выполняет бесконечный цикл за 6 секунд.
      Ответить
      • нихсе перпетуум мобиле.
        в любую точку вселенной -- за пять секунд. (ц)
        Ответить

    Добавить комментарий