整数のセットビットをカウントするC/C ++プログラム?
セットビットをカウントするということは、指定された整数の1をカウントすることを意味します。このために、適用できる複数のソリューションがあります。この場合、2進数(整数の2進数表現)があり、文字列から1の数を数える必要があります。
1の数を数えるために、文字列を取得し、各要素をトラバースして、文字列のすべての1を数えます。たとえば、17を入力すると、17のバイナリは2つの1を含む10001であるため、出力は2になります。
Input: Enter a positive integer: 6 Output: 2
説明
6のバイナリ表現は110で、2セットのビットがあります
この反復アプローチでは、ビットごとに1回の反復が必要です。数値のすべてのビットを実行します。これ以上ビットが設定されなくなると、反復は終了します。最悪の場合、最上位ビットのみが設定された32ビットワードでは、32回の反復をループします。このソリューションは最も単純なソリューションであり、1がスパースで最下位ビットの中にある場合に役立ちます。
例
#include <stdio.h> int main(void) { unsigned int n = 34; for (c = 0; n; n >>= 1) { c += n & 1; } printf("%d\n", c); }
-
マージソートを使用して配列内の反転をカウントするC/C ++プログラム?
指定された配列をソートするために発生する反転の数は、反転数と呼ばれます。反転問題は、マージソートアルゴリズムを使用して解決できる古典的な問題です。この問題では、v左側にある要素よりも多くのすべての要素をカウントし、そのカウントを出力に追加します。 ThisLogicは、マージソートのマージ関数内で実行されます。 トピックをよりよく理解するために、例を見てみましょう。マージプロセスに関係する2つのサブアレイについて考えてみましょう- Input: arr[] = { 1, 9, 6, 4, 5} Output: Inversion count is 5 説明
-
三角マッチ棒番号のC/C ++プログラム?
マッチ棒を使用して作成された三角形は、正三角形を作成するように配置されます。これは、三角形のマッチ棒番号と呼ばれます。三角形のマッチ棒の数は、マッチ棒を三角形にするために必要なマッチ棒の数です。 この問題では、数はマッチ棒のピラミッドXの床であり、私たちのタスクは、x階のマッチ棒のピラミッドを形成するために必要なマッチ棒の最小総数を印刷するプログラムを作成することです。 概念をより明確にする例を見てみましょう。 Input: 7 Output: 84 説明 これは三角数の拡張です。整数Xの場合、必要なマッチ棒はX番目の三角数の3倍、つまり(3 * X *(X + 1))/ 2になります。