fork download
  1. #include <stdio.h>
  2.  
  3. // 部分和を求める関数
  4. void findCombinations(int data[], int size, int target, int k) {
  5. int i, j, sum, count;
  6.  
  7. // 要素の組み合わせをチェック
  8. for (i = 0; i < (1 << size); i++) {
  9. sum = 0;
  10. count = 0;
  11. for (j = 0; j < size; j++) {
  12. if (i & (1 << j)) {
  13. sum += data[j];
  14. count++;
  15. }
  16. }
  17. // 和が目標値と一致し、要素数がkの場合、結果を表示
  18. if (sum == target && count == k) {
  19. printf("Combination: ");
  20. for (j = 0; j < size; j++) {
  21. if (i & (1 << j)) {
  22. printf("%d ", data[j]);
  23. }
  24. }
  25. printf("\n");
  26. }
  27. }
  28. }
  29.  
  30. int main() {
  31. int data[] = {1, 2, 3, 4};
  32. int size = sizeof(data) / sizeof(data[0]);
  33. int target = 5;
  34. int k;
  35.  
  36. // 要素数が1から4までの組み合わせを検索
  37. for (k = 1; k <= size; k++) {
  38. printf("Combinations with %d elements:\n", k);
  39. findCombinations(data, size, target, k);
  40. }
  41.  
  42. return 0;
  43. }
Success #stdin #stdout 0s 5304KB
stdin
Standard input is empty
stdout
Combinations with 1 elements:
Combinations with 2 elements:
Combination: 2 3 
Combination: 1 4 
Combinations with 3 elements:
Combinations with 4 elements: