• 締切済み

グループ分け

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

みんなの回答

noname#144013
noname#144013
回答No.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 さんが書かれたコード(一部でも構いません)を示された上でのご質問であれば、 ある程度、具体的なコードを用いたアドバイスができるかも知れません。 ※ご健闘をお祈り致します。

回答No.1

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

関連するQ&A