【PTA】シャッフルマシン

シャッフルは、トランプのデッキをランダム化するために使用される手順です。標準的なシャッフル技術は弱いとみなされており、従業員が不適切なシャッフルを実行してギャンブラーと協力する「内部統制」を避けるために、多くのカジノは自動シャッフルマシンを採用しています。あなたの仕事は、シャッフル マシンをシミュレートすることです。

マシンは、指定されたランダムな順序に従って 54 枚のカードのデッキをシャッフルし、指定された回数だけ繰り返します。カードデッキの初期状態は以下の順番であるものとします。

S1、S2、...、S13、
H1、H2、...、H13、
C1、C2、...、C13、 D1、
D2、...、D13、
J1、J2

ここで、「S」は「スペード」、「H」は「ハート」、「C」は「クラブ」、「D」は「ダイヤモンド」、「J」は「ジョーカー」を表します。与えられた順序は、[1, 54] の異なる整数の順列です。i 番目の位置の数字が j の場合、カードを位置 i から位置 j に移動することを意味します。たとえば、S3、H5、C1、D13、J2 の 5 枚のカードしかないとします。シャッフル順序 {4、2、5、3、1} を指定すると、結果は J2、H5、D13、S3、C1 になります。もう一度シャッフルを繰り返すと、結果は C1、H5、S3、J2、D13 になります。

入力仕様:
各入力ファイルには 1 つのテスト ケースが含まれます。それぞれの場合において、最初の行には、繰り返し回数を表す正の整数 K (≤20) が含まれています。次の行には指定された順序が含まれます。行内のすべての数値はスペースで区切られます。

出力仕様:
テスト ケースごとに、シャッフル結果を 1 行で出力します。すべてのカードはスペースで区切られており、行の最後に余分なスペースがあってはなりません。

サンプル入力:

2 36 52 37 38 3 39 40 53 54 41 11 12 13 42 43 44 2 4 23 24 25 26 27 6 7 8 48 49 50 51 9 10 14 15 16 5 17 18 19 1 20 21 22 28 29 30 31 32
33
34 35 45 46 47

サンプル出力:

S7 C11 C10 C12 S1 H7 H8 H9 D8 D9 S11 S12 S13 D10 D11 D12 S3 S4 S6 S10 H1 H2 C13 D2 D3 D4 H6 H3 D13 J1 J2 C1 C2 C3 C4 D1 S5 H5 H11 H12 C6 C7 C8 C9 S2 S8 S9 H10 D5 D6 D7 H4 H13 C5

C++ コード:

#include <iostream>
using namespace std;
int main(){
    
    
    int n;
    cin>>n;//洗牌次数
    int i=0;
    string b[54]={
    
    "S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12","S13",
                  "H1","H2","H3","H4","H5","H6","H7","H8","H9","H10","H11","H12","H13",
                  "C1","C2","C3","C4","C5","C6","C7","C8","C9","C10","C11","C12","C13",
                  "D1","D2","D3","D4","D5","D6","D7","D8","D9","D10","D11","D12","D13",
                  "J1","J2"};//替换
    int op[54]={
    
    0};//顺序数字
    string a[54];//装洗牌后的牌
    
    for(i=0;i<54;i++){
    
    
        cin>>op[i];}
    
    for(i=0;i<n;i++){
    
    
        for(int j=0;j<54;j++){
    
    
            a[op[j]-1]=b[j];
        }
        if(i!=n-1){
    
    
            for(int j=0;j<54;j++){
    
    
            b[j]=a[j];
            }
        }
    }
    for(i=0;i<54;i++)
    {
    
    
        cout<<a[i];
        if(i!=53){
    
    cout<<" ";}
    }
}
``

おすすめ

転載: blog.csdn.net/qq_51669241/article/details/114382692