こんにちは
前回の質問から間が空いてしまったため再度質問を投稿しました。
ビンゴカード作成の重複チェックについて質問があります。
前回の回答を参考にコードを修正してみたのですが、以下の仕様でカードを作成した場合、乱数の重複チェックを入れるとしたら
number[rnd] = tmp;の直後でしょうか?
また、現在のコードでは重複してしまいますが、代入時のループ順で重複チェックなしでも実現でも重複せずに表示させることは可能でしょうか?
知恵をお借りしたいです。
【仕様】
5x5のビンゴカード
表示する数字は1~75まで
縦一列は1~15の範囲で横5列分
初期化、代入、表示の3つのブロックに分ける
bingo変数の縦列ににランダムで作成した配列を5個入れる
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <time.h> 4 5#define BINGO_HEIGHT (5)//縦5マス 6#define BINGO_WIDTH (5)//横5マス 7#define MAX_NUM (15)//ビンゴの数値幅 8 9int main(void) 10{ 11 int bingo[WIDTH][BINGO_HEIGHT];//ビンゴカード 12 int number[MAX_NUM];//ビンゴナンバー 13 int rnd;//乱数 14 int cnt_arr; 15 int cnt_col;//縦カウンタ 16 int cnt_row;//横カウンタ 17 int tmp; 18 19 srand((unsigned)time(NULL));/* 乱数系列の変更 */ 20 21 22 for (cnt_arr = 0; cnt_arr< MAX_NUM; cnt_arr++) {//配列初期化 23 number[cnt_arr] = cnt_arr +1; 24 } 25 26 //bingo変数への代入 27 for (cnt_row = 0; cnt_row < BINGO_WIDTH; cnt_row++) { 28 for (cnt_col = 0; cnt_col < BINGO_HEIGHT; cnt_col++) { 29 for (cnt_arr = 0; cnt_arr < MAX_NUM; cnt_arr++) {//配列シャッフル 30 rnd = rand()%(MAX_NUM); 31 tmp = number[cnt_arr]; 32 number[cnt_arr] = number[rnd]; 33 number[rnd] = tmp; 34 } 35 // bingo変数に並び替えた乱数配列の先頭5列を代入 36 bingo[cnt_row][cnt_col] = number[cnt_col] + (MAX_NUM*cnt_col); 37 } 38 } 39 //bingo変数の表示 40 for (cnt_row = 0; cnt_row <BINGO_WIDTH; cnt_row++) {//ビンゴカードのマスを生成した数値で埋める 41 for (cnt_col = 0; cnt_col <BINGO_HEIGHT; cnt_col++) { 42 printf("%2d ", bingo[cnt_row][cnt_col] );//出力 43 } 44 putchar('\n');//改行 45 } 46 return 0; 47} 48
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/01/09 21:38
2016/01/10 04:43
2016/01/10 07:26