質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

2回答

1009閲覧

組み合わせの合計の計算方法

Merrifield

総合スコア31

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/09/19 07:29

c

1int ts[i] = {n1, n2, n3, n4, n5, ........};

例えば、上のような配列があるとき、ここからm個の組み合わせのそれぞれの合計の求め方は、どのようにプログラムで書きば良いでしょうか?

c

1int ts[5] = {50, 55, 56, 57, 58};

具体的な数字でやると、上の配列から3個の組み合わせのそれぞれの合計は、50+55+56,50+55+57,50+56+57,50+55+58,50+56+58,50+57+58,55+56+57,55+56+58,55+57+58,56+57+58となりますが、このようなことをやりたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

OkukawaRyoki

2020/09/19 07:43

どのようなコードを書いているのかの記載をした方が解答が集まると思います! 頑張ってください!
episteme

2020/09/19 08:38 編集

要は n個の中からr個を取り出すときのすべての組み合わせ(nCr通り)を列挙できればいいのかしら?
guest

回答2

0

これでいいですか?

C

1#include <stdio.h> 2 3#define N 5 4#define M 3 5 6int ts[N] = { 50, 55, 56, 57, 58 }, a[M]; 7 8void step(int i, int k) 9{ 10 if (i == M) { 11 k = a[0], printf(" %d", a[0]); 12 for (i = 1; i < M; i++) 13 k += a[i], printf(" + %d", a[i]); 14 printf(" = %d\n", k); 15 } 16 else 17 for (int j = k; j < N; j++) 18 a[i] = ts[j], step(i + 1, j + 1); 19} 20 21int main(void) { step(0, 0); }

実行結果

text

1 50 + 55 + 56 = 161 2 50 + 55 + 57 = 162 3 50 + 55 + 58 = 163 4 50 + 56 + 57 = 163 5 50 + 56 + 58 = 164 6 50 + 57 + 58 = 165 7 55 + 56 + 57 = 168 8 55 + 56 + 58 = 169 9 55 + 57 + 58 = 170 10 56 + 57 + 58 = 171

投稿2020/09/19 10:57

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

お気楽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

投稿2020/09/19 09:26

編集2020/09/19 09:30
mjk

総合スコア303

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問