0

7 文字の配列をランダムに生成するスクラブル プログラムを作成しています。

これは、文字を生成して配列に入れる私のコードであり、うまく機能します。

char randomletters (char letters[8], int i){

srand((time(NULL)));


for(i=0; i<7; i++){
    letters[i] = (rand() % 26 + 65);
}


     return letters[8];
}

私の唯一の問題は、標準のスクラブル配布を使用して、特定の文字が表示される回数を制限する方法を見つけ出すことです。「B」などは 2 回しか使用できません。各文字の数を数えたステートメントが26個あり、多すぎる場合は最初からやり直す方法があると考えていました。しかし、それは最善の方法ではないようです。

コードの答えを探しているのではなく、それを実現する方法についてのアイデアだけです。

前もって感謝します。

4

2 に答える 2

1
char array[] = "AAAAAAAAABBCCD";

unsigned remaining = sizeof array;


int get_a_letter(void)
{
  unsigned idx;
  int sample;

  if (!remaining) return EOF;

  idx = urnd(remaining);
  sample = array[idx] ;
  array [idx] = array [--remaining];
  array [remaining] = sample; // @Note:1
  return sample;
}

urnd(xxx)0 から ( xxx -1) までのランダムな値を返す関数です。

アップデート

@注 1: このステートメントは、ランダムな文字を描画するために必要ではありませんが、次のラウンドに役立ちますremaining = sizeof array;。最初からやり直すにはリセットで十分です。(配列はスクランブルされますが、最初の文字はすべて存在します)

于 2012-09-13T22:07:46.390 に答える
0

文字と使用回数を保持する構造体の配列を作成します。0 から 25 の間の数字をランダムに選択します。選択したセルのカウントが 0 より大きい場合は、文字をラックに追加します。文字の数を減らします。ラックのタイルが 7 個になるまで繰り返します。残りの文字が 7 個未満になるまで、全体の思考を繰り返します。

于 2012-09-13T21:43:34.903 に答える