最近、「のデータ型の配列のすべての可能な組み合わせを取得する方法」の質問に答えました。私の答えは:より効率的なリストの組み合わせ
#include <stdio.h>
int main()
{
/* String for combos to be enumerated */
char set[4] = { 'a', 'b', 'c', 'd' };
/* Length of the array */
int setLength = 4, a, b, c;
/* This will print all combos that have 1 value. E.g. A, B, C, D */
for (a = 0; a < setLength; a++)
{
printf("%c : ", set[a]);
}
/* This will give the 1st value of the combo */
for (a = 0; a < setLength; a++)
{
/* This will give the 2nd value. Resulting in combos with a length of 2 */
for (b = 0; b < setLength; b++)
{
printf("%c%c : ", set[a], set[b]);
}
}
/* 1st value */
for (a = 0; a < setLength; a++)
{
/* 2nd value */
for (b = 0; b < setLength; b++)
{
/* 3rd value */
for (c = 0; c < setLength; c++)
{
printf("%c%c%c : ", set[a], set[b], set[c]);
}
}
}
/* To continue with longer combos simply add more and more for loops */
printf("\n");
return 0;
}
しかし、私はこの質問に対する他の答えを見てみると、それらはすべて言語の組み込み関数に関係していました。 C#。そのために私の質問は、私が正解したか信頼できるか、そうでない場合は、組み込み関数なしでこれを行うより効率的な方法であると答えた方法です。
:のような機能を使用することが可能な場合
は、示唆しますか?ちなみにあなたのプログラムは4要素セットでしか動作しないようです。これは解決策にはなりません。 –
関連していませんが、C言語では関数を必要としないときは引数をとりますが、引数として 'void'を取ると明示的に言わなければなりません。 'int main()'と 'int main(void)'は2つの異なることを意味します。最初の引数は不定数の引数をとり、後者は引き数をとりません。また、Cの仕様では、 'main'関数は' int main(void) 'や' int main(int argc、char * argv []) 'のように見えるはずです、' int main() 'は有効な'主な機能です。 –
@Joachim Pileborgありがとう、私はまだCの非常に新しいので批判はいつも歓迎です –