Возможные комбинации сделаны? - PullRequest
0 голосов
/ 29 января 2012

В Perl, как я могу проверить все возможные комбинации в числе. Например, интересующая меня комбинация - это разделение.

Например: 53 может быть "5 3" или просто "53" Например: 215 может быть «21 5» или «2 15»

1 Ответ

2 голосов
/ 30 января 2012

Фактически вы распределяете пробелы по всем позициям между символами.На каждой позиции пространство либо реализовано, либо нет для каждой комбинации.Таким образом, вы можете представить его как двоичное число, 1 означает наличие пробела, 0 означает отсутствие пробела.

#!/usr/bin/perl

use warnings;
use strict;

my $num = shift;
my @digits = split //, $num;
my $length = length($num) - 1;

if ($length == 0) {
    print "$num\n";
    exit;
}

for my $i (0 .. 2 ** $length - 1) {
    my $mask = sprintf "%0${length}b", $i;
    my @replace_arr = split //, $mask;
    my $idx = 0;
    for (@replace_arr, '') {
        print $digits[$idx];
        print ' ' if $_;
        $idx++;
    }
    print "\n";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...