Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 задачки   Yura Evdokimov   21 Apr 2003 21:03:40 
 Re: задачки   Yury Kopyl   22 Apr 2003 08:53:30 
 Re: задачки   Moderator of RU.PERL   22 Apr 2003 11:35:05 
 задачки   Alexander Shulgin   23 Apr 2003 08:44:12 
 задачки   Michael Spector   10 Jun 2003 21:59:35 
 задачки   Serg Chervjakov   10 Jun 2003 23:51:35 
Архивное /ru.perl/166794ce75db6.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional