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

    +94.5

    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
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    type
     p = ^h;
     h = record
          no:word;
          nx:p;
         end;
    var
     n,k,i:word;
     a,b:p;
    
    begin
    readln(n,k);
    new(b);
    a:=b;
    for i:=1 to n-1 do
    begin
     a^.no:=i;
     new(a^.nx);
     a:=a^.nx;
    end;
    a^.no:=n;
    a^.nx:=b;
    i:=1;
    while true do
    begin
     if a^.nx=a then break;
     if i=k then
     begin
      b:=a^.nx;
      a^.nx:=a^.nx^.nx;
      dispose(b);
      i:=1;
     end;
     a:=a^.nx;
     inc(i);
    end;
    writeln(a^.no);
    end.

    "Гуманитарное" решение задачи Иосифа Флавия (гуглите).
    Тут n - количество людей, убивают каждого k-нного, пока не останется один единственный выживший.

    Запостил: Lolwho, 11 Декабря 2009

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

    • ЗЫ: это обычный поцкаль, исходник решения олимпиадной задачи. Однобуквенные названия переменных используются с целью уменьшения размера кода (это один из критериев оценки решения) :D
      Ответить
      • мда... олимпиады убивают в студентах программистов. Что за такой критерий - малый размер кода? Современное решение любой софтварной задачи должно иметь: а. Качественный объектный дизайн (или функциональную декомпозицию, если чистый C/Pascal), б. удобочитаемый код. Где эти критерии?
        Ответить
        • Нету такого критерия. Обычно есть единственное ограничение на размер исходника сверху (от 64 до 512 кб), а на топкодере еще есть штраф за большое количество неиспользуемого кода
          Ответить
    • Задача Иосифа-Флавия решается за ОДИН цикл =) нужно только немного подумать.
      Ответить
      • Забыл уточнить: за один цикл ровно в N итераций, причем БЕЗ массива (если принять, что первый под номером 1, второй под номером 2 и т.д.).
        Ответить

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