【転載】長さnの配列からm個の数を選択した全ての結果
2059 ワード
【転載】元住所:http://www.cnblogs.com/shuaiwhu/archive/2012/04/27/2473788.html 原作者:NULL 00
ここでは考え方と一部のコードだけを貼って少し変えることができます:1.まず配列の中のAから1つの要素を取り出して、それから残りの要素Bから1つの要素を取り出して、それから残りの要素Cの中で1つの要素を取り出します2.配列のインデックスによって小さいから大きいまで順番に取って、繰り返しを避けます
上記の再帰原則に基づいて、インデックスに従って小さいものから大きいものまで、次のアルゴリズムを設計することができます.
ここでは考え方と一部のコードだけを貼って少し変えることができます: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);
}
}