User:C ++を使用して、各アイテムをアレイでランダムな順序でアレイで反復するにはどうすればよいですか？ Assistant:C ++を使用してランダムな順序で各アイテムを繰り返して、_Fisher-Yates_ Shuffleアルゴリズムを使用できます。

実装の例は次のとおりです。

`` cpp
#include <iostream>
#include <cstdlib>
#include <ctime>

名前空間STDを使用。

void shuffle（int arr []、int size）{
    srand（time（null））;//ランダムシードを初期化します
    
    for（int i = size -1; i> = 1; i–）{
        int j = rand（）％（i + 1）;// 0とiの間のランダムインデックスを生成します
        スワップ（arr [i]、arr [j]）;//インデックスIおよびjで要素を交換します
    }
}

int main（）{
    int arr [] = {1、2、3、4、5、6};
    int size = sizeof（arr） / sizeof（arr [0]）;//配列のサイズを取得します
    
    シャッフル（arr、size）;//配列要素をシャッフルします
    
    //シャッフルアレイを繰り返します
    for（int i = 0; i <size; i ++）{
        cout << arr [i] << "";
    }
    cout << endl;
    
    0を返します。
}
`` `

この実装では、「shuffle（）」関数は、配列とそのサイズを入力として取得し、Arrayの要素をFisher-yatesアルゴリズムを使用してランダムな順序で再配置します。`main（）`関数は `shuffle（）`を呼び出して、arr配列をシャッフルし、ループを使用して各要素を印刷するためにシャッフルアレイを繰り返します。

プログラムの結果は、シャッフルアルゴリズムのランダムな性質のために実行されるたびに異なります。 
User:アレイをランダムに反復する他の方法はありますか？
ランダムな順序の分布を歪むことができる場合、p（x）=（a * x + b）mod nが「ランダムに見える」順序で0からn-1のすべての整数にアクセスするという事実を使用できます。aがnとcoprimeである場合、xは0からn-1に反復します。Coprimeを複雑にしないようにするには、最初にドメインを2^kに拡張し、次にドメイン内の3^mを適切に拡張できます。これがプログラムの例です。

「c c
#include <iostream>
#include <cstdlib>

名前空間STDを使用。

//拡張ドメインを見つけます
int minpoweroftwo（int x）{
    int ans = 1;
    while（ans <x）{
        ans = ans << 1;
    }
    Ansを返します。
}

//ランダムな共同体を見つけます
int randomcoprime（int x）{
    int ans = 0;
    int y = 3
    while（y <= x）{
        y *= 3;
        ans ++;
    }
    return rand（）％ans + 1;
}

int main（）{

    int arr [] = {1、2、3、4、5、6};
    int n = sizeof（arr） / sizeof（arr [0]）;
    srand（time（null））;

    Expandn = minpoweroftwo（n）;
    coprimen = randomcoprime（Expandn）;

    // p（x）= b、[0、展開]のランダムオフセット
    int index = rand（）％（expandn）;
    
    // p（x）=（a * x + b）mod nに従って配列を繰り返します
    for（int i = 0; i <enduln; i ++）{
        //拡張部品をスキップします
        if（index <n）
            cout << arr [index] << endl;

        index += coprimen;
        if（index> expandn）index- = endocdn;
    }

    0を返します。
}
`` `