【転載】長さnの配列からm個の数を選択した全ての結果


【転載】元住所:http://www.cnblogs.com/shuaiwhu/archive/2012/04/27/2473788.html 原作者:NULL 00
ここでは考え方と一部のコードだけを貼って少し変えることができます:1.まず配列の中のAから1つの要素を取り出して、それから残りの要素Bから1つの要素を取り出して、それから残りの要素Cの中で1つの要素を取り出します2.配列のインデックスによって小さいから大きいまで順番に取って、繰り返しを避けます
上記の再帰原則に基づいて、インデックスに従って小さいものから大きいものまで、次のアルゴリズムを設計することができます.
//arr     
//start       
//result    ,     
//count result      ,     
//NUM         
//arr_len        ,   
void combine_increase(int* arr, int start, int* result, int count, const int NUM, const int arr_len)
{
  int i = 0;
  for (i = start; i < arr_len + 1 - count; i++)
  {
    result[count - 1] = i;
    if (count - 1 == 0)
    {
      int j;
      for (j = NUM - 1; j >= 0; j--)
        printf("%d\t",arr[result[j]]);
      printf("
"
); } else combine_increase(arr, i + 1, result, count - 1, NUM, arr_len); } }