ちょっとひらめきました。多分車輪の再発明系というか、基礎を知らないということだと思いますが、、。
重複を含む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進数表記」の勉強となってしまいましたが、「重複しない全てのパターン」の出力までもう一歩のような気がします。
コメントを残す