順列!

ちょっとひらめきました。多分車輪の再発明系というか、基礎を知らないということだと思いますが、、。

重複を含むnのn乗の組み合わせすべてを列挙するにはn桁目までのn進数を書き出せば良さそうです。

3の場合
0:000
1:001
2:002
3:010
4:011
5:012
6:020
7:021
8:022
9:100
10:101
11:102
12:110
13:111
14:112
15:120
16:121
17:122
18:200
19:201
20:202
21:210
22:211
23:212
24:220
25:221
26:222
9×2+3×2+1×2
18+6+2
おお、27種類。
プログラムにしてみると、、、

$color_element = array($r, $g, $b);
$num_elements = count($color_element);
$buff[$num_elements];
$i = 0;
while($i < pow($num_elements, $num_elements)){
	echo $i.":";
	$j = $num_elements - 1;
	$tmp = $i;
	while($j){
		$num = floor($tmp / pow($num_elements, $j ));
		$buff[$j] = $num;
		echo $buff[$j];
		$tmp = $tmp % (pow($num_elements, $j));
		$j--;

	}
	$buff[0] = $tmp;
	printf("%d<br />\n", $buff[0]);
	$i++;
}


ときに「全ての組み合わせを出力」と「n進数表記」の勉強となってしまいましたが、「重複しない全てのパターン」の出力までもう一歩のような気がします。


コメントを残す

メールアドレスが公開されることはありません。

56 − 49 =