「これはヤバかったな」という遅刻エピソード

シャッフルした配列の先頭から順番に各グループに割り当てていくプログラムを教えてください。

A 回答 (2件)

cater さん、こんにちは。



一例として、トランプの全カード(ジョーカーを含めた53枚)をシャッフルして、適当な人数(2人以上)
に振り分けるプログラムとして、その考え方のみを上げてみました。

■シャッフルカード分配のサンプルプログラム例
1)カード全体用の配列(カード配列)を用意する。
  ・1枚のカードを数値とみなして整数配列とする。
  例) int nCard[52+1];

2)カード配列に初期値をセットする。
  ・カード配列に順番に数値(カードを数値に置き換えたもの)をセットする。
  例)以下のようにカードを数値に置き換えて、カード配列( nCard[0]~[52] )にセットする。
      ・カード ( A, 2~10, J, Q, K ) → 1~13
      ・スペード   → 100番台
      ・クローバー → 200番台
      ・ハート    → 300番台
      ・ダイヤ    → 400番台
      ・ジョーカー → 999番
      ・103番なら、「スペードの3」を表す。
      ・211番なら、「クローバーのJ(Jack)」を表す。
      ・301番なら、「ハートのA」を表す。
    として3桁の数字の組合わせでカードを表し、カード配列にセットする。
      ・nCard[0] ~[12] = 101~113
      ・nCard[13]~[25] = 201~213
      ・nCard[26]~[38] = 301~313
      ・nCard[39]~[51] = 401~413
      ・nCard[52] = 999

3)カード配列をシャッフルする。
  ・乱数を使用し、カード配列( nCard[0]~[52] )の中身を入れ替える。
  例)以下の操作を行う。(※カード全てを入れ替える場合)
    (1) ループ上限値( n=53 )、ループ変数( i )とし、
      for文: for( i=1; i<n; i++ ) で以下 (2)、(3) の処理を繰り返す。
    (2) 乱数関数を使用し、( i ~ n-1 ) の間の乱数値( a )を決定。
    (3) nCard[i-1] と nCard[a] を入れ替える。

4)カードを配る。
  ・適当な人数分の持ち札配列を用意し、カード配列の先頭から順番に振り分ける。
  例)4人の場合
    (1) 持ち札配列( int nMbCard[4][53/4+1]; )を用意する。
    (2) 2重ループなどを使用し、nMbCard[x][y] に nCard[0]~[52] の値をセットする。
       ・x = 0~3
       ・y = 0~(53/4)

以上です。少しでも参考にして頂ければ幸いです。

なお、具体的なコードについては、cater さんがやり易い方法でお考えになられた方が良いと
思いますので、ここでは示せません。(御免なさい)
また、cater さんが書かれたコード(一部でも構いません)を示された上でのご質問であれば、
ある程度、具体的なコードを用いたアドバイスができるかも知れません。
※ご健闘をお祈り致します。
    • good
    • 0

 


 どのような配列を、どのような順番で、どのようなグループに、どのように割り当てるのか、
書きましょう。
 
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報