人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

a,b,cという配列データーが存在しており、
a,ab,ac,abc,b,bc,c
という組み合わせを出力するようなPerlのサンプルを掲載したサイトを御願いします。

●質問者: jun0429
●カテゴリ:コンピュータ
✍キーワード:ABC AC BC Perl サイト
○ 状態 :終了
└ 回答数 : 2/3件

▽最新の回答へ

1 ● ssasame
●20ポイント

http://ybbs.data-room.info/8500/0151/00001073.htm

ハードディスク 復元 データ ノート pc at data-room.info

上のようなサイトはいかがでしょうか?

Perlには詳しくないので、このサイトでよいのか分かりません。見当はずれな場合はポイントは結構です。

◎質問者からの返答

ちょっと違います。


2 ● makeworld
●30ポイント

http://security.okweb.jp/kotaeru.php3?q=378142

2番の方の回答をすこし変更すればできます。アルゴリズム的には3番の方の再帰呼び出しの方がわかり易いと思います。


#!/usr/bin/perl


my @data = (”a”, ”b”, ”c”);

for($i = $#data+1; $i; $i--) {

combi($#data+1, $i, ¥&work); # 作業関数も渡す

}


# 組み合わせ(nCr)のパターンを作り、1つずつ作業関数に渡す汎用関数

sub combi {

my ($n, $r, $func) = @_;

$n--; $r--; # 記述簡略化のため1引いておく


my @cnt = (0 .. $r); # ループカウンタ(組み合わせパターン)を初期化

LOOP_TOP:

while (1) {

$func->(@cnt);

for (my $i = 0; $i <= $r; $i++) {

if ($cnt[$r-$i] < $n-$i) {

$cnt[$r-$i]++;

$cnt[$r-$i] = $cnt[$r-$i-1]+1 while $i--;

redo LOOP_TOP;

}

}

last;

}

# 全てのカウンタが更新できなければ終了

}


# 作業関数

sub work {

print ”@data[@_]¥n”; # 組み合わせを表示

}

◎質問者からの返答

ありがとうございました。

助かりました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ