C++で設定されたビット数に従って配列をソートします
ここでは、セットビットに基づいて配列をソートするための1つの興味深い問題があります。配列内の要素のセットビット数が多い場合、それはセットビット数の少ない別の要素の前に配置されます。いくつかの数が12、15、7であると仮定します。したがって、設定されたビットは、基本的に2進表現の1の数です。これらは、1100(12)、1111(15)、および0111(7)です。したがって、並べ替えると次のようになります-
1111, 0111, 1100 (15, 7, 12)
ここでは、最初にセットビットの数を見つける必要があります。次に、C++STLソート関数を使用してそれらをソートします。セットビット数に基づいて比較ロジックを作成する必要があります
アルゴリズム
getSetBitCount(number): Begin count := 0 while number is not 0, do if number AND 1 = 1, then increase count by 1 number = right shift number by one bit done return count End compare(num1, num2): Begin count1 = getSetBitCount(num1) count2 = getSetBitCount(num2) if count1 <= count2, then return false, otherwise return true End
例
#include<iostream> #include<algorithm> using namespace std; int getSetBitCount(int number){ int count = 0; while(number){ if(number & 1 == 1) count++; number = number >> 1 ; //right shift the number by one bit } return count; } int compare(int num1, int num2){ int count1 = getSetBitCount(num1); int count2 = getSetBitCount(num2); if(count1 <= count2) return 0; return 1; } main(){ int data[] = {2, 9, 4, 3, 5, 7, 15, 6, 8}; int n = sizeof(data)/sizeof(data[0]); sort(data, data + n, compare); for(int i = 0; i<n; i++){ cout << data[i] << " "; } }
出力
15 7 9 3 5 6 2 4 8
-
C++の2D文字配列内の指定された文字列の数のカウント
次の問題は日刊紙のクロスワードの例です。ここでは2次元の文字配列が与えられ、問題のステートメントは2次元の文字配列の迷路から与えられた単語を見つけることです。検索アルゴリズムには、からの個々の文字の検索が含まれます。 上から下へ 、右から左へ 逆もまた同様ですが、斜めではありません。 例を挙げて理解しましょう 入力- 文字列ワード-LAYS 2D文字列[]-{LOAPYS、 KAYSOT、 LAYSST、 MLVAYS、 LAYSAA、 LAOYLS}; 出力- 2D文字配列内の指定された文字列の数:7 説明- 単語の文字列配列が与えられているので、それらから、Top-Bottom
-
C++でセットをk個のサブセットに分割する方法の数を数えます
与えられた2つの数字eとp。目標は、セットのe個の要素をp個のパーティション/サブセットに分割できる方法の数を数えることです。 例 入力 e=4 p=2 出力 Count of number of ways to partition a set into k subsets are: 7 説明 If elements are: a b c d then ways to divide them into 2 partitions are: (a,b,c)−(d), (a,b)−(c,d), (a,b,c)−(d), (a)−(b,c,d), (