|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Serg Chervjakov 2:5020/400 10 Jun 2003 23:51:35 To : Michael Spector Subject : задачки -------------------------------------------------------------------------------- Tue Jun 10 2003 21:59, Michael Spector wrote to Yura Evdokimov: YE>> Есть паpа маленьких сабжев, с котоpыми ни обитатели ситфоpyма, ни YE>> пpогpаммеp.py помочь не смогли. YE>> 1. Разложение числа во все возможные сyммы: YE>> 4 YE>> 3+1=4 YE>> 2+2=4 YE>> 2+1+1=4 YE>> 1+1+1+1=4 YE>> Задачка стpок на 5-6, вот только я сильно тyплю и pешить не могy. Если добавить условие, что суммы не должны повторятьсь, то это будет задачка городской школьной олимпиады по информатике этого, прошлого или пазапрошлого года :) (я уже не помню, когда какие были). Причем среди задач она была самой сложной. Могу только добавить, что из-за условия, что суммы не должны повторяться, рекурсия тут не самое удачное решение. Я уже не помню, как я ее тогда решил, но как-то хитрее (ес-но фичек перла там небыло - лишь QB, где даже массив (список) в функцию передать низя). Поэтому, я сомневаюсь, что тут прям таки 5-6 строчек. А вообще, конекретно к перлу она имеет лишь очень отдаленое отношение (хотя на перле, осуществить ее проще всего). Это надо идти в какую-нибудь эху по алгоритмам - на олимпиадах знание языков программирования - не столь важно. Гораздо важнее внимательность (всего 4 часа - ошибаться не стоит) и умение составить алгоритм. И вообще, чегой-то сь вы подняли тему аж двух месячной давности? :) MS> sub find_sum MS> elsif($num > $acc) { MS> for(my $i=1; $i<=$num-$acc; $i++) { MS> my @newarr = @arr; MS> push @newarr, $i; MS> find_sum($num, $acc+$i, @newarr); MS> } MS> } MS> } MS> find_sum(4, 0); Так что ль исхдный код выглядит? Он ничего не выдает. sub find_sum { if($num == $acc) { print join(" + ", @arr)." = $num\n"; } elsif($num > $acc) { for(my $i=1; $i<=$num-$acc; $i++) { my @newarr = @arr; push @newarr, $i; find_sum($num, $acc+$i, @newarr); } } } find_sum(4, 0); --- ifmail v.2.15dev5 * Origin: FidoNet Online - http://www.fido-online.com (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/166794ce75db6.html, оценка из 5, голосов 10
|