C++ で記述された少なくとも 1 つの空でない部分配列を含む数値のビット単位の AND

PHPz
リリース: 2023-09-09 09:33:04
転載
567 人が閲覧しました

C++ で記述された少なくとも 1 つの空でない部分配列を含む数値のビット単位の AND

配列が与えられた問題を解決するには、少なくとも空でない部分配列のビット単位の AND であるすべての可能な整数を見つける必要があります (例: -

Input : nums[ ] = { 3, 5, 1, 2, 8 }
Output : { 2, 5, 0, 3, 8, 1 }
Explanation:
2 is the bitwise AND of subarray {2},
5 is the bitwise AND of subarray {5},
0 is the bitwise AND of subarray {1, 2}, {2, 8} and {1, 2, 8},
3 is the bitwise AND of subarray {3},
8 is the bitwise AND of subarray {8},
1 is the bitwise AND of subarray {1}, {3, 5} and {3, 5, 1}.

Input : nums[ ] = { 2, 6, 3, 8, 1 }
Output: { 1, 8, 3, 6, 2, 0 }
ログイン後にコピー

)解決策を見つける方法

適用できる 簡単な方法 は、

  • 考えられる空でない部分配列をすべて見つけることです。

  • 配列を走査するときは、部分配列内の各要素のビット単位の AND を計算します。

  • 値の重複を避けるために、すべての結果をコレクションに保存します。

#include <bits/stdc++.h>
using namespace std;
int main(){
    int arr[] ={ 2, 6, 3, 8, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);
    // Declaring set to store result of each AND operation.
    unordered_set<int> result;
    int val;
    // nested loops to traverse through all the possible non empty subarrays.
    for (int i = 0; i < n; ++i){
        for (int j = i, val = INT_MAX; j < n; ++j){
            val = val & arr[j];
            // storing result of AND operation
            result.insert(val);
        }
    }
    cout << "All possible numbers are: ";
    // printing all the values of set.
    for (auto i = result.begin(); i != result.end();i++)
        cout << *i << " ";
    return 0;
}
ログイン後にコピー

出力

All possible numbers are: 1 8 3 6 0 2
ログイン後にコピー

上記のコードの説明

  • 設定された状態はすべての AND を格納します操作の結果。

  • AND 演算ではすべてのビットを 1 に設定する必要があるため、INT_MAX を使用して「val」変数を初期化します。

  • 内部ループは、i 番目のインデックス内のすべての可能なサブ配列を反復処理します。

  • 要素を相互に関連付け、また要素自体を関連付けます。 AND 演算を実行し、結果セットに格納します。

  • すべて印刷

結論

このチュートリアルでは、この問題を解決する簡単な方法について説明しました。 AND 演算の可能な各部分配列を計算します。この問題を解決するための C プログラムについても説明しました。また、このコードは Java、C、Python などの他の言語でも作成できます。このチュートリアルがお役に立てば幸いです。

以上がC++ で記述された少なくとも 1 つの空でない部分配列を含む数値のビット単位の ANDの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート