Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

Cプログラムで配列またはループを使用せずに{1,2,3、…n}のすべてのサブセットを出力する


正の整数nが与えられた場合、配列やループを使用せずに、{1、2、3、4、…n}のセットのすべてのサブセットを出力する必要があります。

任意の数、たとえば3を指定したように、セット{1、2、3}内のすべてのサブセットを出力する必要があります。これは{1 2 3}、{1 2}、{2 3}、{1 3}、 {1}、{2}、{3}{}。

ただし、ループや配列を使用せずにこれを行う必要があります。したがって、配列やループを使用せずにこのタイプの問題を解決するための可能な方法は、再帰のみです。

入力:3出力:{1 2 3} {1 2} {1 3} {1} {2 3} {2} {3} {}説明:セットは{123}になります。サブセットを見つける入力:4出力:{1 2 3 4} {1 2 3} {1 2 4} {1 2} {1 3 4} {1 3} {1 4} {1} {2 3 4} {2 3 } {2 4} {2} {3 4} {3} {4} {} 

特定の問題を解決するために使用するアプローチ

  • num =2 ^n-1から0まで。
  • n個のビットを持つnumのバイナリ表現を検討してください。
  • 1を表す左端のビットから開始し、2番目のビットは2を表し、以下同様にnを表すn番目のビットまで続きます。
  • ビットが設定されている場合は、ビットに対応する番号を出力します。
  • numのすべての値に対して、0になるまで上記の手順を実行します。

簡単な例を使用して、説明されているアプローチがどのように機能するかを詳しく理解しましょう-

入力n=3と仮定すると、問題はnum =2 ^ 3-1=7から始まります

  • 7のバイナリ表現⇒
1 1 1
  • 対応するサブセット⇒
1 2 3

numから1を引く; num =6

  • 6のバイナリ表現⇒
1 1 0
  • 対応するサブセット⇒
1 2

numから1を引く; num =5

  • 5のバイナリ表現⇒
1 0 1
  • 対応するサブセット⇒
1
3

numから1を引く; num =4

  • 4のバイナリ表現⇒
1 0 0
  • 対応するサブセット⇒
1

同様に、num =0になるまで繰り返し、すべてのサブセットを出力します。

アルゴリズム

ステップ1を開始→関数内intsubset(int bitn、int num、int num_of_bits)If bitn> =0 If(num&(1 < =0)Print "{" Call function subset(num_of_bits-1、num、num_of_bits)Print "}" Call function printSubSets( num_of_bits、num-1)Else Return 0Return1ステップ3→Infunctionint main()int n =4を宣言して初期化しますfucntionprintSubSets(n、(int)(pow(2、n))-1)Stop> 

 #include  #include  //この関数は、num.intサブセットのバイナリ//表現に対応する//サブセットを再帰的に出力します(int bitn、int num、int num_of_bits){ if(bitn> =0){//指定されたサブセットにのみ数値を出力します//それに対応するビットが//numに設定されている場合。 if((num&(1 < =0){printf( "{"); //numのバイナリ表現に対応する//サブセットをPrintintします。サブセット(num_of_bits-1、num、num_of_bits); printf( "}"); //関数を再帰的に呼び出して//次のサブセットを出力します。 printSubSets(num_of_bits、num-1);それ以外の場合は0を返します。 return 1;} // main programint main(){int n =4; printSubSets(n、(int)(pow(2、n))-1);} 

出力

 {1 2 3 4} {1 2 3} {1 2 4} {1 2} {1 3 4} {1 3} {1 4} {1} {2 3 4} {2 3} {2 4} {2} {3 4} {3} {4} {} 

  1. Pythonプログラムでループを使用せずに数値シリーズを印刷する

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 2つの数NとKが与えられた場合、問題は、数(N)がゼロ(0)より大きくなるまでNから数Kを引くことです。次に、Nが負またはゼロになると、その数が元になるまでKを加算し始めます。番号(N)。 例 N = 10 K = 4 出力 10 6 2 -2 2 6 10 アルゴリズム Nがゼロより大きくなるまで関数を何度も呼び出します(すべての関数呼び出しで、NからKを減算します)。 数値が負またはゼロになると、数値が元の数値になるまで、各関数呼び出しでKを追加し始めます。 ここでは、加算と減算

  2. ループを使用しない印刷番号シリーズのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 − 2つの数NとKが与えられた場合、問題は、数(N)がゼロ(0)より大きくなるまでNから数Kを引くことです。Nが負またはゼロになると、その数が元の番号(N)。 たとえば、 N = 10 K = 4 Output will be: 10 6 2 -2 2 6 10 アルゴリズム 1. we call the function again and again until N is greater than zero (in every function    call we subtra