实现二进制计数方法以生成集合子集的 C++ 程序

这是一个 C++ 程序,用于实现二进制计数方法以生成集合的子集。

算法

Begin
   Take the array elements as input.
   function BinaryCounting():
      Calculate subset by r = pow(2, n) // 这里 n = 元素数。
      Generate binary numbers from 0 to r-1.
      Call solution() for each binary string of n character.
End

示例

#include<iostream>
#include<math.h>
using namespace std;
void solution(char code[], int a[], int n) //打印解决方案
{
   int i;
   cout<<"\t { ";
      for(i = 0; i < n; i++) {
         if(code[i] == '1')
            cout<<a[i]<<" ";
      }
   cout<<"}\n";
}
int BinaryCounting(int a[], int n) {
   int r, i, l;
   char bin[] = "00000";
   r = pow(2, n);
   //生成从 0 到 r-1 的二进制数。
   for(i = 0; i < r; i++) {
      solution(bin, a, n);
      l=n-1;
      h:
      if(bin[l] == '0')
         bin[l] = '1';
      else {
         bin[l] = '0';
         l--;
         goto h;
      }
   }
}
int main() {
   int i, n;
   cout<<"\nEnter the number of elements: ";
   cin>>n;
   int a[n];
   cout<<"\n";
   for(i = 0; i < n; i++) {
      cout<<"Enter "<<i+1<<" element: ";
      cin>>a[i];
   }
   cout<<"\nThe subset in the binary counting method: \n";
   BinaryCounting(a, n);
   return 0;
}
输出结果
Enter the number of elements: 4
Enter 1 element: 4
Enter 2 element: 3
Enter 3 element: 2
Enter 4 element: 1
The subset in the binary counting method:
{ }
{ 1 }
{ 2 }
{ 2 1 }
{ 3 }
{ 3 1 }
{ 3 2 }
{ 3 2 1 }
{ 4 }
{ 4 1 }
{ 4 2 }
{ 4 2 1 }
{ 4 3 }
{ 4 3 1 }
{ 4 3 2 }
{ 4 3 2 1 }