Школоло / Говнокод #8423 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
program lucky;
var a0,a1,a2,a3,a4,a5,a6: integer;
begin
  for a0:= 0 to 9 do
    for a1:= 0 to 9 do
      for a2:= 0 to 9 do
        for a3:= 0 to 9 do
          for a4:= 0 to 9 do
            for a5:= 0 to 9 do
              if (a0+a1+a2)=(a3+a4+a5) then
                begin
                  writeln(a0,a1,a2,a3,a4,a5);
                  break;
                end;
  readln;
end.

Поиск всех возможных счастливых билетов (у которых сумма первых трех чисел совпадает с суммой последних трех)

Запостил: Schrodinger Schrodinger, (Updated )

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

    • Чтобы зря счетчик не крутить. Двух счастливых билетов, которые различаются только последней цифрой, не существует.
      Ответить
  • #include<fstream.h>
    #include<process.h>
    void main()
    {
    ofstream out;
    out.open("LuckyTicket.txt",ios::out);
    int i1,i2,i3,i4,i5,i6,count=0;
    for(i1=0;i1<10;i1++)
    for(i2=0;i2<10;i2++)
    for(i3=0;i3<10;i3++)
    for(i4=0;i4<10;i4++)
    for(i5=0;i5<10;i5++)
    for(i6=0;i6<10;i6++)
    if(i1+i2+i3==i4+i5+i6)
    {
    out<<i1<<i2<<i3<<" "<<i4<<i5<<i6<<"\n";
    count++;
    }
    out<<"Number of lucky tickets is "<<count<<endl;
    out.close();
    }

    wikipedia http://ru.wikipedia.org/wiki/%D0%A1%D1%87%D0%B0%D1%81%D1%82%D0%BB%D0% B8%D0%B2%D1%8B%D0%B9_%D0%B1%D0%B8%D0%BB% D0%B5%D1%82
    Ответить
    • Для таких вещей Haskell рулит:
      import Numeric (floatToDigits)
      
      sumDigits = sum . fst . floatToDigits 10 . fromIntegral
      
      sumDigitsEquals x y = sumDigits x == sumDigits y
      
      luckyNumbers limit = [(x, y) | x <- [0..limit], y <- [0..limit], sumDigitsEquals x y]
      
      main = mapM_ putStrLn $ map show $ luckyNumbers 999
      Ответить
      • >Для таких вещей Haskell рулит:
        Или вы не умеете им пользоваться или для таких вещей хаскел не рулит судя по кол-ву кода, по сравнению с грязной императивщиной.
        Ответить
        • пять строк, из которых одна строка - импорт модуля, ещё одна - описание точки входа.
          Это реализация "в лоб", полностью работающая программа без циклов, основная часть которой будет работать для нахождения счастливых билетов с любым чётным количеством цифр в билете (нужно будет только поменять 999 на 9999, 99999 и т.п.).
          Код в топике - 16 строк.
          Жабо-реализации ниже, во-первых, гораздо менее понятны, во-вторых, не являются Compilable и Runnable.
          И таки да, я не профессиональний хаскелист, я занимаюсь ФП ради эстетического удовольствия и самообразования
          Ответить
    • ...и тут мы вспоминаем, что на дворе XXI век и пора бы уже писать параллельные программы.
      Ответить
      • ... и тут мы вспоминаем, что такая задача была на школьной олимпиаде по программированию году в 94м, и решалась на qbasic, tp6 или не помню каком c, причём успешно. Ну да, приходилось подождать.
        Ответить
    • Сколько времени займёт миллион итераций на многогигагерцевом процессоре?
      Ответить
      • Сначала ответь на вопрос: Сколько капель в море и звезд на небе? И только после я отвечу на твой детский вопрос.
        Ответить
  • Хех, получается, я изобрел не самый плохой велосипед =)
    Ответить
  • А просто посчитать сумму первых трех и последних трех чисел, а затем сравнить, совесть не позволяет?
    Ответить
      • Позиционная систе́ма счисле́ния (позиционная нумерация) — система счисления, в которой значение каждого числового знака (цифры) в записи числа зависит от его позиции (разряда).
        Ответить
        • копипа́́́́́́́́́́ста из педи̮́́́̀ви́́́́́кии дете̻кте́́́́́д[4̺]
          Hͮ̇ͤ̓Ȅ̞̤͡ ̨̊ͯ̀̃͂͊C̷̪͈̳̗̖̗ͪͩͅO͎̔ͧ͌̊̐̐͑ͅM̘̣̮̪̤̌̅̑̈́͑̔ ̦͔Ẻ̺̤̤̣̱͂̆ͭ̕S̻̦̲͙͌͌ͦ͌͠ͅ
          Ответить
            • Ṫ̼̥̖̙͌̃̒o͔̾ͤ̀̂ͧ̑̓̾ͨ ̤͚̮̻̌i̫̺̞͎̇͂̋ͨͨn̫̥̰̥̠̫͐ͫ̐́ͧ͌͗́ͅv̬̜͊̾̅̅̈́ͤ ̹o̤̫̜̼̥̪͓̱̊͒͑̈̉ͪͣ̈k̖̭͙͉̙̣͚͒̎̾̏̌̒̉̏ėͬ͋̔̚ ̤̠̠̯̤͖̮̗̉̒ͤ ͔̯͕̞̹̥̻̫͌͑̚t̗̯̗̞̮̼͖ͬ̄ͯ̒h̺̜̰͉̱̜̃ͬ̂ͫe͔ͫ͗͐͊ ͕̮̠ ̤̯̙̥̜̺ͯͮh͕̥͈̫̪̀̆͌̋͐ͮ̓ͅi̼̞̐ͩͤͯ̈́̎̽͌́v̓͆̉ͯͬ ̠͍̗͇̅̿̌ͦe̯͕̭̥̦̰̬̥͚̾̑͆ͤͫͪͥ̍-̙̫̭̠̮̳̮̉ͣͯm̝̓̉í̥͈̙͓̠͎̌ͥ̐̎̓̾ͤͩn̖͙͈̥͓̏͗̋̃ ̮d̩̲̙̺̎͊ͨ̽̚ ̣̝̗̻̩͕͇͇̓̾͐̒ͥͨr̥̜̬̱̺̠̖̩̱͂͌̑̃ẽ͚̱̮̣̲̑̃̇͒̓ ̙̙p͈̰ͥͪ̌̏̏̃̎̑ͅr͕̗̉͛͑͊̊͋̾e͉̤̩̠͈̹̹͌ͬ̋̂͗͑̚s ̘̗͎͙͎̽ͨͯͮe̦̝̝̟͕̭͕̻ͧͯͣ̐n̼͕͚̦̭̾̎ṱ̦͖̱͛ͣͣͅi ̻͛̈́ͬ̚ñ͔̣̪̄̅g̫͇͛ͭ ͈̮̙̥͉̹̯̻͚͊͊c͇̱̳̞̓̌͒̒͛̏ͨh̻̗̯̳̫̾ͪ̔ͩ͒a̒̈̒̄ͧ ̖͚̦̝̤̦͕̓́o̖͇̻̓̔s̲̥̝̘̼̺̠̻̜̋͆̇ͥ̔ͩ̏.̌͑̓̐͛͆̃ ͉̭̖͕̲
              ̻̥͎̺̻̐ͩI͓̟̖̘̥̪͎ͤ͑ñ̖̙̅͂̇ͦ̈́v̫̘͕̹̤̫̎ͅͅö͈́͐ ̣̞͈̬̦̻̤k̞̳̂̓̂̒̚i̙̳͍̝̗͈̺̓̅̅͌̆͐̇ǹ̫̗ͪ̽ğ͑̾ ̝̗̝̺̜̑ ͕̇̑̎̉̇t̜̜̰̬̰ͭ̇̇h͓̝͚͈̩͔͌̉ͬͦͧͮ̈͗ͅê͚̞͚͓̻̫̒ ͉ ̮̘̳̺̙̥̦̫͗͊ͯ̿͊ͧͬ͌f̬̰ͯe̜̙̞̺̯̭̞ͩ̒͒è͔͖̖͚͌̽̔ ̟l͕͉̱̺͒ͤ͒̋ͧ̚i͔̭̥̥̠̞͍͎͆̑͑̈ͯ̎ͅṅ̳̯̞̆̒ͮ́ͅgͪ ̼͓̪̦̱̮͕͂̔͊͂ ̥̺͓̬̳̳̣̽̃ͅo̻̳̭̙̹͍͋̍́͐̚f͙̰̗ͫͧ͒ͬͭ͐ ̤̺ͪ̉̿͒c̹͔̦͈̲̗ͣ͌͌ͨh̙̗̙̞͕̺ͯ͒̉ͮ̔ͧͯͯa̘̻ͨͥ͐ͫ̅ ͍͈͎͙̖ȯ̺̙͖͋̓̎̿̑ͫs̰̲͖͔̤̤̥̹͕ͣ͆̈́̍͋.ͦ̓͆͗͌̅̌͊ ͓̩͉̤̱̌ͅ
              ͓ͫW̳͇̰̣̭͈̯̭̃̋̎̏͋ͭi͍̪̫͐͐̆́͗̐t͍̰̫͍̆͒͒ͦ͑̒̓ͭ h̪̤͗͗ͪͣ̿͆̽̆ͥ ̱͍̟͔̲̹̗̫́͑̊͋ͦͨͣö͕̻̌̾͌̿u̗͔͍ͬͦͦ̃ͥ͐t̩͖̹̩͇͐ ͎̭͎ ̞͖͗o͎͓̝̱̣̟ͭ͒͐͆̔̆̒̅ͅͅr̖͚̭̝̜̄̎̀̈́ͦͭ̚d̩̰̼̠͆ͤ ͔̬̩ẽ̥̻ͥ̓̍͗̀̐̇r̥̗̳̠͚̟̪͎̮̃.͈̰̜̤̯̲̜̏̋͒ͤͧ͗ͅ
              ̞͇̪̰̙̖͍ͣͪṰ͕̫̇̑ͧ̌ͫh͎͈͓̀̓́ͭ̑̿͆e̟͇̬̅̓̅͌ͪ͌̆ ̼̺̞͖ͅ ͙̣̍ͥͅN͉̼̘̪̗̳͖̣̋ẹ̦̳̼͉̻̍ͦ̌̑z̥̭ͤ̿̂p̣̲̪͍̱̔̐ e͈͇̱͚̗͙̠̓ͥ͂̂̒̋r̺͐ͩ̀̍ͦ͋̚̚d̖̟̘̹̳̫̞͐̈ͮͩ͆i̒̇ ̼͔̀̊͑͗a̫̗̎ͣ͊̅ͩṉ͋̒ ͓̍͂ͣ̂h͖͍͙̭͍͈̃̐̓ͭ͒ͨ͛ï̖̰̟͒ͯ̐͌v̗̟͙̞̈̈̓̒ͪ̅ͪ e̠͕͓̫̮̬̗̭̯͂ͦ̂́̇̈́ͯ-̺̾ͅm͚͕̐̋́͆ͦͦ̏ï̲̮̘ͧͬ̆͋n̘̺̬̳͌̅̇̌̈́̒́͂d̋͌́͗ ̪̫͙̲͖͎̦ͤͬ ̜̥̻̹ͩ̅ͥͪ̐̍̐͌̋o͓̙ͣ̏ͫ̑̚f̰̟̓̒̊ͭ̑ͥ ͕̺ͩͯ̊͗͗c͓̭͂ͬͤ̒͆ͪ̚h̠͙͖̩͉̅̂ͦȧ̪͔̀o͓̖͇ͥ̓̄́̅ ̼͙̮͇ͅs̮̜̝̣ͨ̐͌ͤ͆̈́.͖͉̮̒̒̅̇ ̙̲̤͉̠̜̭͕̈̋ͥZ̰̗̥̤ͬ͂̾ͪ͌ͅa̭̩̞̽ͧ̐͗̂͒̏̋lͥ͐́͒ͨ ͓̭͓̜ͫg̳̺̼̖͆o̞̬̐̉̑͊͛ͦ.̮̹ͮ̒ͬͫͭ̅ͣ̉ ̝̝̲̤̺͇̱͙ͯ͋ͯͦ̓
              ̮͖͔̯̻ͣ͛͆͑͊̒̽̇H̫̫̃̎̂e͙̳̺̭͓̗̮̖ͬ̔ͥ̓ ͕̬͖̠͖͉͕̬̀ͣͩ͗w͉̺͚͙̘̞̍̄̌͗̃ͪ͒ͦh͈̦͇̮̟̲͈̋ȯ̓̉ ̰̦̜̲̣͖̲͓͛͊́̋ ̮̝̰̙̦͛͗͐ͥ̑̎ͩW̜̯̳͉͓͓̱̦͊̃̐a̺̺̭̽̾ͭͭ̒̅̓i̤̘͓̅ ̗̙̭̖̦t̩̺̞ͭ̓̎̚s̥͙̞̺̟̝͎̪̠̽̒̾̈́ ͙̰̞̺̈̂̑͌ͨ̆ͅB̭̰̰͖̜̒ͫ̌̾ĕ̗͕͇̤̱̤̹̞ͫͪh͙͎͔̪̓ͨ ̤̱î͙̙̦͎͈̠̓̒̐̑n̠͓͉̭̭̙̎̈́d̥͒͒̋ͥͩͫͧ ̠̖̦̮̹ͭ͛̊ͫT͇̘̫͖̗͓̤ͥ͑̂̑̊ͣͥ͐h͖̦͇̍̓ͩ̅̈́ͫͧͣ͛e͊ ̝̮̤̮̻̼͚̜͂ͬ͋ͧ̌̾͛ͅ ̭̳̩̦̞͎̜͛͑̓͂ͪ͐ͤͅͅW̟͚̫͕͓̺͍̅ả̜͕̭̻͚̗̖̂ͤl͊ͧͦ ͓̙̗͇̜͇̦͆̉ͣ͌̓l̰͍͇̟ͮ̓̇.̭͓̞̙̭̑ͬ͂
              ̹̘͇̳̘̥͍̉ͬ͆ͨ̃ͪ̿Ż̲̫͉̭̳̘̐̆ͯ̀A̦͖͉͉̪̥͓̋ͧ͊̏̏ͅ L̝͚͖̘̼͙̙͋ͨ̄͌͗̏̽G̟͇̣̺̬͖̭͂̎ͨͮͣ̾ͤO͇̓ͩ͊ͭͭ̐̆ͅ ̳̳̯̳̹̠!͉̤͉̻̫̻͂̿͛ͬ̃
              Ответить
  • Гм, ну перебирать 10^5 комбинаций тоже не сильно оптимизация.
    т.е. 5 циклов (хоть отдельные по цифрам, хоть один от 0 до 999 (и 99 соотв)) и проверяем разность f = a+b+c-d-e. Если разность в пределах от 0 до 9, то билет [a][b][c][d][e][f] счастливый.

    В принципе, я думаю, можно добиться цикла, который выводил бы все сочетания цифр с заданной суммой, а потом перебрать возможные суммы от 0 до 27 для получения наборов "половинок". Но будет ли это быстрее?
    Ответить
    • Конечно быстрее, хотя бы потому, что нас будет интересовать 10^3 чисел (точнее их разбиение на подмножества с одинаковой суммой), а не 10^6.
      Ответить
      • Это как ферзей расставлять, проверяя все оставшиеся поля, хотя можно проверять только (например) вертикаль.
        Ответить
    • думается мне так:
      1. фиксируем "полусумму" [hs] от 0 до 27 (т.е. первый цикл)
      2. находим минимальную и максимальную необходимые цифры для данной суммы, таким образом ограничиваем второй цикл сверху или снизу
      3. третьим циклом решаем уравнение c=hs-a-b
      4. в процессе запоминаем найденные цифры и из дальнейших поисков исключаем все перестановки
      Ответить
      • Вот вам с барского плеча типа нормальная реализация. Не позорьтесь "оптимизациями"
        И уж простите за богомерзкую жабу.
        int count=0;
        		for (int i=-10,sum=0; i<=20; ++i,count+=sum*sum,sum=0)			
        			for (int j=0; j<10; ++j)
        				sum+=notNegative(10-abs(10-i-j));			
        		o.println(count);


        Из преимуществ
        - короткий, быстрый, 2 цикла
        - не использует память (в том смысле что весь алгоритм можно сделать на регистрах)

        Из недостатков
        - неочевиден. для быдла. (хотя, признаюсь - я его еще специально так ужал)
        Ответить
        • так красивей
          int count=0;
          		for (int i=-20,sum=0; i<20; ++i,count+=sum*sum,sum=0)			
          			for (int j=0; j<10; ++j)
          				sum+=max(10-abs(i+j),0);			
          out.println(count);
          Ответить
          • О, вот это другое дело. Но инициализацию sum лучше бы вынести во внутренний цикл.
            Ответить
      • Забыл. 2 функции.
        static int notNegative(int a){return a<0 ? 0 : a;}
        static int abs(int a){       return a<0 ? -a : a;}
        Ответить
          • >оптимизация max(0,a)
            блин. точно

            Да его еще можно допиливать:
            ускорить в джва раза, например
            > фиксируем "полусумму" [hs] от 0 до 27 (т.е. первый цикл)
            ;i<=5;
            o.println(count*2);

            Так написано
            - для того чтобы были все мейджик намберы были кратны 10.
            да и не все системы исчисления делятся пополам.
            Ответить
    • Ну да, правильно, подождите пару часов, чтобы получить результат. Видимо поэтому и тормозят современное ПО, реще-то можно, но зачем.
      Ответить
      • У вас производительность ЭВМ сотня операций в секунду?
        Ответить
        • А что такое операция в секунду? Это всего лишь кол-во тактов в секунду. А тут уж как скомпилит.

          Да и видимо поэтому тормозит 50-80% современных игр даже на топовых конфигурациях, зачем оптимизировать, выйдет покруче железо, тормозить не будет.

          Тут очень легко можно избавиться от 1 цикла, вместо условия проверки, всего лишь заменив условие на i5=i3+i4-i0-i1-i2, но даже до этого ума не хватило.
          Ответить
          • тут еще можно внутренние циклы начинать не с 0, а i2 = i1, i3 = i2, i5 = i4 и т.д., по сути же нужно получить сочетания
            уже сокращает время где то в 10 раз
            Ответить
              • что то не так?
                три цикла каждый в 2 раза (а если еще и i2 = i1 + 1, i3 = i2 + 1 делать, то > чем в 2)
                я думаю, в классе 2-3 умножение уже проходят
                Ответить
  • я в школе такое писал.
    Только меня ещё интересовала зависимость числа счастливых билетов от суммы цифр (колокольчик Гаусса вездесущ).
    Ответить
  • н:K!Y?Z:I:D?C(I"B$F.X:X:PJ)U.J$J)W?O,B.U"M:W:B,O!E$N(R)BN?QI"U"L(N"K,Z.V,LZ.K,C:H?F!O?B!Z)C?T$E$W"P P"B)M,L:N(Z$V,T$D(E(N)E!AS"A:A,Q"I"Y!L"U(N?R"J"L)D L$V"W I.VR$E:C)H:V"D,X$V,M(R)R"H)F,S?H)C(K:C.B?I N$Q N Q R?R)G)T$W,Z W.K(X?K?FY)J!S.I(Z!L,R M G"S)E"T D RO T,S X?J"R$W,A?CZ$D$F?G(B$V:F"Q(Y?R$K"C)N$U!D)J"O,S:D$T:UU)FC,C"J:B(SJ Z(M,Q,K!I E,M$X?Z!M$L(HY,E"K O$E(F?J!V:F(Z:U$M.V)P"A(O?F!H)D?I)O,O)V,M(FD(O,N"G.P"WI!H,R:A?M?O U$E$S C)F(SM,A W?Q!H.A)EE F!V"K!V:T GFQ,V!Y)U.R.O.W:M W O)GW?Y:S:D.U,G EJR$F!O.Z:M"FU)P(L!X!S$T?F N.Z?R,G,D.H$A(L)EB V MP,AO.J"X E)Q LI,O,S)M(S"P$B)W$E,B)MY?L(P,W:G$B U(H$D"Z)D O.A(Q U?VBL)USF)A(W:Y$A:X:R!U?O(I V)J,LK!Q"K:T!K"J S:F)S)H:F"AP!A.Z.F.Z(W?IV R)C:K:JY?H"M Z,N)C:K"P.O"Z)T$I$B,CI?V:I?A Y?R(U N.X$N:Y?T?S)LO)PP:Y!F.P,S:D,PVR$Q.L!O$Q!W(H!Y:TT V?M(I"O!C,C)Z?X?X"R(J$M S N.A)V.X?P E?X O.E?Z:A S:A"P.A!S$GZ!J.OH$H(E PB.W"W)N(H,Z?H!P$S?Y.A$O O O?F$U,K$I$H!I.K P$B$Y:Z.P!S$C$O:IY,B,Q.E(H,I H(G X"V?R,V:V)O,A)A!RX"O?U"X.U:F!U$U,N,S T"C,Z$F)I A?F.C(Y,R!C$Y,Z)O:V,I(G?J Z,A:L:X"M$K Z,W,R!X(T)G?R,S,M$M)O?W C.N(U?U.A I:N,T"G.M.A!C.B,L$Y!M!A$I(U?H,T"F)R"L F$R!W!R LM(X"S(L$L)M!E!O?O)T)J"R?S,P)I?E(X.J)Y M H!Y.P!S,L.Y?LG,U,O"T)C$O"J?E.G:L"W,M,Q!Y"K)R)I$E$B!V)T:O V"S,Q$P"N$S.S(W.M?M)NEC(C,A,B$U M?Y!A(U$Y(S(R:R,H(Y(J"M:XG)VF:D"A?Y)Y!C(G,NL"M!S$T N)E)C(B"N"J(U?CU Q:T?N,GU:Q,E(P:S(B.BT)Z,O?D.M.B(W"D!G!J?I?DH)K)R C?K M?L.H"PY:Z T:Y:A?S(D$V"BN(V!S(D$T,E:V?D,JH$A M.X E.T,W"N?N!Y!E,V(J:A"K O:V!P,I:E)Y!H!T!W,E!O:K:R:N,I$KT.G$D O)Y?B$T.P Z:L B NT)K$S"N?T:G$T"Y:N"BКULQCFYWQGQMMLRMYCYUSURHTKLGMMZWRUZKGIE
    Ответить

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

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8