回答編集履歴

1

追記

2018/09/26 05:45

投稿

yambejp
yambejp

スコア114863

test CHANGED
@@ -95,3 +95,81 @@
95
95
 
96
96
 
97
97
  それぞれやり方が違うと思います。どれをお望みなのでしょうか?
98
+
99
+
100
+
101
+ # 追記
102
+
103
+ $bを希望ということで、
104
+
105
+ 配列からr個抜き出す方法を[こちら](https://stabucky.com/wp/archives/2188)を丸パクリで
106
+
107
+
108
+
109
+ ```PHP
110
+
111
+ $num=6;
112
+
113
+ $a=range(1,$num);
114
+
115
+ $b=[];
116
+
117
+ foreach(nCr($a,floor($num/2)) as $val){
118
+
119
+ $b[]=[$val,array_filter($a,function($x) use($val){return in_array($x,$val)==false;})];
120
+
121
+ }
122
+
123
+ print_r($b);
124
+
125
+ function nCr($n,$r){
126
+
127
+ $c=count($n);
128
+
129
+ $a1=[];
130
+
131
+ if($c<$r){
132
+
133
+ return;
134
+
135
+ }elseif($r==1){
136
+
137
+ for($i=0;$i<$c;$i++){
138
+
139
+ $a1[$i]=[$n[$i]];
140
+
141
+ }
142
+
143
+ }elseif($r>1){
144
+
145
+ $j=0;
146
+
147
+ for($i=0;$i<$c-$r+1;$i++){
148
+
149
+ $a2=nCr(array_slice($n,$i+1),$r-1);
150
+
151
+ foreach($a2 as $a3){
152
+
153
+ array_unshift($a3,$n[$i]);
154
+
155
+ $a1[$j]=$a3;
156
+
157
+ $j++;
158
+
159
+ }
160
+
161
+ }
162
+
163
+ }
164
+
165
+ return $a1;
166
+
167
+ }
168
+
169
+
170
+
171
+ ```
172
+
173
+ $numに任意の数値を指定すれば全通り表示されます。
174
+
175
+ ($numは奇数でもいけます)