The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Перебор вариантов"
Отправлено ihor, 20-Июл-05 18:37 
рекурсия - не самый удачный вариант, стека может не хватить.
вот вариант итеративный:
=====================================
#!/usr/local/bin/perl

use strict;
# ====================================
sub load {
    my($fname) = @_;
    my(@vals, @res, $str);
    
    open(FILE, $fname) || die "Can't open $fname!";
    while (defined ($str = <FILE>)) {
        @vals = split(/\s+/, $str);
        push(@res, [0, $#vals, [@vals]]);
    } # while
    close(FILE);
    return \@res;
} # sub

# ====================================
sub make_next {
    my($input) = @_;
    my($i, $m, $carry);
    $carry = 1;
    
    for ($i = $#{$input}; $i >= 0; $i--) {
        $m = ${${$input}[$i]}[0] + $carry;
        if ($m > ${${$input}[$i]}[1]) {
            ${${$input}[$i]}[0] = 0;
        } else {
            $carry = 0;
            ${${$input}[$i]}[0] = $m;
            last;
        } # else
    } # for
    
    return 1 if $carry == 0;
    return 0;
} # sub
# ====================================
sub show {
    my($input) = @_;
    my($elem, @idxs, @vals, $src);
    
    foreach $elem (@{$input}) {
        push(@idxs, ${$elem}[0]);
        push(@vals, ${${$elem} [2]}[${$elem}[0]]);
    } # foreach
    
    print '(' . join(', ', @idxs) . ') ';
    print '(' . join(', ', @vals) . ")\n";
} # sub
# ====================================
sub produce {
    my($input) = @_;
    my($dims, @res, $subres, $elem, $subelem);
    
    do {
        show($input);
    } while (make_next($input));
} # sub
# ====================================
my($fname, $input);
$fname = "/tmp/input.txt";
    
$input = load($fname);
produce($input);

 

Ваше сообщение
Имя*:
EMail:
Для отправки новых сообщений в текущей нити на email укажите знак ! перед адресом, например, [email protected] (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.

На сайте действует частичное премодерирование - после публикации некоторые сообщения от анонимов могут автоматически скрываться ботом. После проверки модератором ошибочно скрытые сообщения раскрываются. Для ускорения раскрытия можно воспользоваться ссылкой "Сообщить модератору", указав в качестве причины обращения "скрыто по ошибке".



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру