- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 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.
#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
А разве не проще вот так:
ура, хаскелистов пребывает
И да будет так вовеки веков. Во имя Монады, Функтора и Частичного применения, аминь!
Или вы не умеете им пользоваться или для таких вещей хаскел не рулит судя по кол-ву кода, по сравнению с грязной императивщиной.
Это реализация "в лоб", полностью работающая программа без циклов, основная часть которой будет работать для нахождения счастливых билетов с любым чётным количеством цифр в билете (нужно будет только поменять 999 на 9999, 99999 и т.п.).
Код в топике - 16 строк.
Жабо-реализации ниже, во-первых, гораздо менее понятны, во-вторых, не являются Compilable и Runnable.
И таки да, я не профессиональний хаскелист, я занимаюсь ФП ради эстетического удовольствия и самообразования
http://ru.wikipedia.org/wiki/%D0%A6%D0%B8%D1%84%D1%80%D1%8B :
Ци́фры — система знаков для записи чисел
http://ru.wikipedia.org/wiki/%D0%A7%D0%B8%D1%81%D0%BB%D0%BE :
Число́ — абстракция, используемая для количественной характеристики объектов
Hͮ̇ͤ̓Ȅ̞̤͡ ̨̊ͯ̀̃͂͊C̷̪͈̳̗̖̗ͪͩͅO͎̔ͧ͌̊̐̐͑ͅM̘̣̮̪̤̌̅̑̈́͑̔ ̦͔Ẻ̺̤̤̣̱͂̆ͭ̕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͇̓ͩ͊ͭͭ̐̆ͅ ̳̳̯̳̹̠!͉̤͉̻̫̻͂̿͛ͬ̃
дэвид блейн как ты это делаешь?
в рот мне ноги™
т.е. 5 циклов (хоть отдельные по цифрам, хоть один от 0 до 999 (и 99 соотв)) и проверяем разность f = a+b+c-d-e. Если разность в пределах от 0 до 9, то билет [a][b][c][d][e][f] счастливый.
В принципе, я думаю, можно добиться цикла, который выводил бы все сочетания цифр с заданной суммой, а потом перебрать возможные суммы от 0 до 27 для получения наборов "половинок". Но будет ли это быстрее?
1. фиксируем "полусумму" [hs] от 0 до 27 (т.е. первый цикл)
2. находим минимальную и максимальную необходимые цифры для данной суммы, таким образом ограничиваем второй цикл сверху или снизу
3. третьим циклом решаем уравнение c=hs-a-b
4. в процессе запоминаем найденные цифры и из дальнейших поисков исключаем все перестановки
И уж простите за богомерзкую жабу.
Из преимуществ
- короткий, быстрый, 2 цикла
- не использует память (в том смысле что весь алгоритм можно сделать на регистрах)
Из недостатков
- неочевиден. для быдла. (хотя, признаюсь - я его еще специально так ужал)
кстати, первое - это оптимизация max(0,a)
блин. точно
Да его еще можно допиливать:
ускорить в джва раза, например
> фиксируем "полусумму" [hs] от 0 до 27 (т.е. первый цикл)
;i<=5;
o.println(count*2);
Так написано
- для того чтобы были все мейджик намберы были кратны 10.
да и не все системы исчисления делятся пополам.
Тарас спалился:
>Я бы сделал два стека
откуда инфа?
>который заспамил главную
tell me moar!
>Поясните мысль.
Ждем личного опровержения. Тоже заметил, что тарас спалился:
А фразу эту я сказал, потому что она стала уже расхожей.
Да и видимо поэтому тормозит 50-80% современных игр даже на топовых конфигурациях, зачем оптимизировать, выйдет покруче железо, тормозить не будет.
Тут очень легко можно избавиться от 1 цикла, вместо условия проверки, всего лишь заменив условие на i5=i3+i4-i0-i1-i2, но даже до этого ума не хватило.
уже сокращает время где то в 10 раз
хочу в школу, где такому учат О_О
три цикла каждый в 2 раза (а если еще и i2 = i1 + 1, i3 = i2 + 1 делать, то > чем в 2)
я думаю, в классе 2-3 умножение уже проходят
Только меня ещё интересовала зависимость числа счастливых билетов от суммы цифр (колокольчик Гаусса вездесущ).