お気楽C言語プログラミング超入門
1 から n までの数字から r 個を選ぶ組み合わせを画面に表示する関数 combinations を定義してください。
こちらを参考に配列参照するようにしてみました。
配列とcombinations(5, 3);を標準入力などからの引数として可変にすればお好みで使えるかと思います。
C
1#include <stdio.h>
2
3#define N 100
4
5int x[N];
6int a[] = {1, 2, 3, 4, 5};
7int sum = 0;
8
9void print_combination(int n) {
10 int tmp = 0;
11 for (int i = 0; i < n; i++) {
12 tmp += a[x[i] - 1];
13 printf("%d+", a[x[i] - 1]);
14 }
15 sum += tmp;
16 printf("=%d +=%d\n", tmp, sum);
17}
18
19void comb_sub(int n, int r, int m) {
20 if (r == 0)
21 print_combination(m);
22 else if (n == r) {
23 for (int i = r; i > 0; i--) x[m++] = i;
24 print_combination(m);
25 } else {
26 comb_sub(n - 1, r, m);
27 x[m] = n;
28 comb_sub(n - 1, r - 1, m + 1);
29 }
30}
31
32void combinations(int n, int r) {
33 if (r > 0 && r <= N) comb_sub(n, r, 0);
34}
35
36int main(void) {
37 combinations(5, 3);
38 printf("total=%d\n", sum);
39}
OUTPUT
13+2+1+=6 +=6
24+2+1+=7 +=13
34+3+1+=8 +=21
44+3+2+=9 +=30
55+2+1+=8 +=38
65+3+1+=9 +=47
75+3+2+=10 +=57
85+4+1+=10 +=67
95+4+2+=11 +=78
105+4+3+=12 +=90
11total=90