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

C++でソートされた順序で1<=n<=kであるnビットが設定されたkビット数のすべての組み合わせを検索します


数kがあるとします。 1 <=n<=kであるn個のセットビットを持つkビット数のすべての可能な組み合わせを見つけます。結果として、最初に1セットのビットを持つすべての数値を出力し、次に2ビットが設定された数値を、すべてのビットが設定される数まで出力します。 2つの数値のセットビット数が同じである場合は、小さい方の数値が最初になります。したがって、k =3の場合、数値は[001、010、100、011、101、110、111]

になります。

ここでは、動的計画法を使用して、1 <=n<=kであるn個のセットビットを持つkビット数のすべての可能な組み合わせを見つけます。この問題は、2つの部分に分けることもできます。長さkのすべての組み合わせを見つけます。ここでn個の1は、長さk – 1とn個のすべての組み合わせに0を付け、長さk –1とn–1個のすべての組み合わせに1を付けます。

#include<iostream>
#include<vector>
#define K 16
using namespace std;
vector<string> table[K][K];
void getCombinations(int k) {
   string str = "";
   for (int bit = 0; bit <= k; bit++) {
      table[bit][0].push_back(str);
      str = str + "0";
   }
   for (int bit = 1; bit <= k; bit++) {
      for (int n = 1; n <= bit; n++) {
         for (string str : table[bit - 1][n])
            table[bit][n].push_back("0" + str);
         for (string str : table[bit - 1][n - 1])
            table[bit][n].push_back("1" + str);
      }
   }
   for (int n = 1; n <= k; n++) {
      for (string str : table[k][n])
      cout << str << " ";
      cout << endl;
   }
}
int main() {
   int k = 4;
   getCombinations(k);
}

出力

0001 0010 0100 1000
0011 0101 0110 1001 1010 1100
0111 1011 1101 1110
1111

  1. C++でn以下のすべての階乗数を検索します

    ここでは、n以下のすべての階乗数を出力する方法を説明します。数値Nは、正の数の階乗である場合、階乗数と呼ばれます。したがって、いくつかの階乗数は1、2、6、24、120です。 階乗数を印刷するために、階乗を直接見つける必要はありません。 i =1から始めて、階乗*iを出力します。最初は階乗は1です。理解を深めるためにコードを見てみましょう。 例 #include <iostream> using namespace std; void getFactorialNumbers(int n) {    int fact = 1;    int

  2. Sの中央値に最も近いk個の数を見つけるC++プログラム。ここで、Sはn個の数のセットです。

    これは、Sの中央値に最も近いk個の数値を見つけるためのC ++プログラムです。ここで、Sはn個の数値のセットです。 アルゴリズム Begin    function partition() for partitioning the array on the basis of values at high as pivot value:    Arguments:       a[]=an array.       l=low    H=high    Bo