A1042。シャッフルマシン

タイトル説明

  シャッフルは、トランプのダデッキをランダム化するために使用する手順です。標準シャッフリング技術が弱いと見られているので、どこで「内部の雇用」を避けるために、

従業員が不十分なシャッフルを行うことで、ギャンブラーと協力し、多くのカジノでは、自動シャッフルマシンを採用しています。

あなたの仕事は、シャッフル機をシミュレートすることです。

  機械は、所定の回数のために与えられたランダムな順序と反復に応じて54枚のカードのデックをシャッフル。カードデッキの初期状態であるとします

S1、S2、...、S13、H1、H2、...、H13、C1、C2、...、C13、D1、D2、...、D13、J1、J2:次の順序で

  ここで、「S」は「ジョーカー」のための「クラブ」のための「C」、「ダイヤモンド」のための「D」、および「J」、「ハート」のための「H」、「スペード」の略です。所定の順序は、[1、54]における異なる整数の順列であります

I-thpositionの数がjの場合は、位置jに位置Iからカードを移動することを意味します。S3、H5、C1、D13とJ2:例えば、我々は唯一の5枚のカードを持っていると仮定します。

shuffluing順序{4、2、5、3、1}が与えられると、結果は次のようになりますJ2、H5、D13、S3、C1。我々は再びシャッフルを繰り返すようにしている場合、結果は次のようになります。C1、H5、S3、J2、D13。

入力形式

  各入力ファイルには、1つのテストケースをcontanins。各場合について、最初の行は、繰り返し回数がK(≤20)interger陽性を含んでいます。そして、次の行は、与えられた順序が含まれています。行のすべての数字は、スペースで区切られます。

出力フォーマット

  各テストケースのために、一列にシャッフル結果を印刷します。すべてのカードは、スペースで区切られ、行の最後に余分なスペースがあってはなりません。

サンプル入力

  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 46 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

問題の意味

これは、ランダムに割り当てられたトランプをシャッフルするためのプロセスです。標準シャッフル技術が弱いと見なされているので、完全にギャンブラーに協力しないことで、「内部作業」の従業員を避けるためにシャッフルし、多くのカジノが自動シャッフル機を使用しています。

あなたの仕事は、シミュレートシャッフル機にあります。

マシンは、ランダムな順序のシャッフルカード54に説明すると、所定の回数を繰り返します。

カードの初期状態は、次の順序で、設定されていると仮定:S1、S2、...、S13、H1、H2、...、H13、C1、C2、...、C13、D1、D2、...、 D13、J1、J2

「S」は、「スペード」を表し、「H」は「ハート」を表し、「C」は、「PLUM」の略であり、「D」は「ダイヤモンド」を表し、「J」は、を意味し、「ピエロ」。所定のシーケンスは[1,54]は異なる整数に配置され
、i番目のデジタル位置はその後、カードは位置jに位置Iから移動されることを意味Jある場合。

例えば、我々は唯一の5枚のカードがあると:S3、H5、C1、D13、及びJ2、所与の配列{4,2,5,3,1}のセットを、結果は次のようになりますJ2、H5、D13、S3、C1。

我々は再びシャッフルリピートしたい場合は、その結果は次のようになります。C1、H5、S3、J2、D13

基本的な考え方

  • アレイの所定の順序、添字はトランプの初期位置であり、ポーカーの要素の値は、最終的な位置であります
  • 記録とそれぞれの番号のカード
  • 各カードの初期配列の記録開始位置を使用して、次のアレイ、各カードの記録位置、最終用途の位置更新ライセンスの配列を使用
  • 上記の手順を繰り返し、サイクルタイムのK
  • カード番号モジュロ13を取得するために各色に対応する丸め13を得るためにスーツ
#include <ビット/ STDC ++ H.>
 INT  CONST N = 54であり ; // カードの総数が
char型 [MPを5 ] = { ' S '' H '' C '' D '' J ' }; // スーツ
INTスタート[N + 1 ]、エンド[N + 1 ]、次に[N + 1 ]; 

int型のmain(int型 ARGC、CHAR * ARGV []){
     int型 K。    
    scanfの( " %のD "、&​​K); // 反復シャッフリング
    のためのINT I = 1 ; I <= N; I ++ ){ 
        スタート[I] = I; // 初期化カード番号          
    } 
     のためのint型 I = 1 ; I <= N; I ++ ){ 
        scanfの(" %のD "、&次に[I]); // 入力カード操作の位置の各位置における
    }
     ためのint型 STEP = 0 ; STEP <K。 ++ STEP){ // K回のシャッフリング
        のためにINT I = 1; I <= N; I ++ ){ 
            端[次に[I] =スタート[I]; // 最後に記憶されたi番目の位置からカードアレイ、対応する位置次に[I] 
        }
         のためのint型 I = 1 ; I <= N; I ++ ){ 
            スタート[I] = 終了[I]; 
        } 
    } 
    のためのINT I = 1 ; I <= N; I ++ ){
         IF(私は!= 1 ){ 
            のprintf("  " ); 
            スタート[I] - ; 
            のprintf(" %のCの%のD "、MPが[開始[i]は/ 13 ]、起動[I]%13 + 1 )。
        } 
    } 
    戻り 0 
}

重要な問題の解決策

  • ノートカードは、1または0から始まる番号が付けられてい

おすすめ

転載: www.cnblogs.com/YC-L/p/12128416.html