配列の重複をチェックする

C++C++Beginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、C++ プログラミング言語を使って、与えられた配列に重複する要素があるかどうかを判断する方法を学びます。これは、配列をソートしてから、隣接する要素を等しいかどうかで比較することで達成されます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL cpp(("C++")) -.-> cpp/BasicsGroup(["Basics"]) cpp(("C++")) -.-> cpp/ControlFlowGroup(["Control Flow"]) cpp(("C++")) -.-> cpp/IOandFileHandlingGroup(["I/O and File Handling"]) cpp(("C++")) -.-> cpp/SyntaxandStyleGroup(["Syntax and Style"]) cpp/BasicsGroup -.-> cpp/arrays("Arrays") cpp/ControlFlowGroup -.-> cpp/conditions("Conditions") cpp/ControlFlowGroup -.-> cpp/for_loop("For Loop") cpp/IOandFileHandlingGroup -.-> cpp/output("Output") cpp/SyntaxandStyleGroup -.-> cpp/code_formatting("Code Formatting") subgraph Lab Skills cpp/arrays -.-> lab-96122{{"配列の重複をチェックする"}} cpp/conditions -.-> lab-96122{{"配列の重複をチェックする"}} cpp/for_loop -.-> lab-96122{{"配列の重複をチェックする"}} cpp/output -.-> lab-96122{{"配列の重複をチェックする"}} cpp/code_formatting -.-> lab-96122{{"配列の重複をチェックする"}} end

ライブラリとメイン関数を書く

ライブラリとメイン関数を以下のように書きます。

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

bool containsDuplicate(int n[], int m)
{
    // 重複があることを示すフラグを作成する
    int f = 0;

    // 重複をチェックするために入力配列をソートする
    sort(n, n + m);

    for (int i = 0; i < m - 1; i++)
    {
        if (n[i] == n[i + 1])
        {
            // 重複が見つかった場合、フラグを1に設定してループを抜ける
            f = 1;
            break;
        }
    }

    if (f == 1) {
        // 重複が見つかった
        return true;
    }
    else {
        // 重複は見つからなかった
        return false;
    }
}

int main()
{
    cout << "\n\nWelcome to LabEx :-)\n\n\n";
    cout << " ===== 入力配列に重複があるかどうかをチェックするプログラム  ===== \n\n";

    int i, n1, n2;

    int a1[] = {2, 3, 1, 4, 5, 2, 8, 9};
    int a2[] = {2, 3, 1, 4, 5, 10, 8, 9};

    bool duplicate1 = false;
    bool duplicate2 = false;

    // 2つの入力配列のサイズを取得する
    n1 = sizeof(a1) / sizeof(a1[0]);
    n2 = sizeof(a2) / sizeof(a2[0]);

    // 最初の入力配列を表示する
    cout << "\n\n最初の入力配列の要素は :\n\n";

    for (i = 0; i < n1; i++)
    {
        cout << a1[i] << "  ";
    }

    // 最初の入力配列に重複があるかどうかをチェックする
    duplicate1 = containsDuplicate(a1, n1);

    if (duplicate1) {
        cout << "\n\n最初の入力配列に重複があります";
    }
    else {
        cout << "\n\n最初の入力配列には重複はありません";
    }

    // 2番目の入力配列を表示する
    cout << "\n\n\n\n2番目の入力配列の要素は :\n\n";

    for (i = 0; i < n2; i++)
    {
        cout << a2[i] << "  ";
    }

    // 2番目の入力配列に重複があるかどうかをチェックする
    duplicate2 = containsDuplicate(a2, n2);

    if (duplicate2) {
        cout << "\n\n2番目の入力配列に重複があります";
    }
    else {
        cout << "\n\n2番目の入力配列には重複はありません";
    }

    cout << "\n\n\n";

    return 0;
}

コードを実行する

コードを ~/project/main.cpp ファイルに保存し、以下のコマンドを使ってコードをコンパイルします。

g++ main.cpp -o main &&./main

コードを理解する

配列内の重複をチェックするために、まず containsDuplicate() という関数を作成しました。この関数は2つの引数を取ります。入力配列 n[] とそのサイズ m です。
この関数は、重複が見つかると値 1 で、そうでなければ値 0 でフラグを立てます。重複を見つけるために、入力 n[] はまずシステム定義の sort() 関数を使ってソートされます。その後、ソートされた配列の隣接する要素が比較され、重複が見つかるとフラグが設定されます。
メイン関数では、それぞれ潜在的な重複を持つ2つのテスト配列 a1a2 が作成されます。containsDuplicate() を使って、各配列に重複があるかどうかをチェックし、結果を出力します。

if (duplicate1) {
    cout << "\n\nThe first input array contains duplicate";
}
else {
    cout << "\n\nThe first input array does not contain any duplicate";
}

この出力は、入力配列に重複があるかどうかを示します。

まとめ

C++ プログラミングを使えば、配列内の重複を簡単に判断できます。入力配列をソートしてから隣接する要素を比較することで、重複する値を示す効率的なフラグ付けシステムを開発できます。