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
-
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
-
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