5×5のビンゴカードにFisher–Yatesを用いて、1~100の乱数を格納
ガラガラを使っていることを想定して、またFisher–Yatesを用いて、抽選用乱数を生成
生成された乱数が、ビンゴカードにある数値と『アタリ』か『ハズレ』かを判定
縦横斜めのいずれかが当たった場合、ガラガラによる乱数生成のループを抜け、何行目がアタリです!といった文言を表示する
というソースを書きたいです。
該当のソースコード
C言語
1#include<stdio.h> 2#include<stdlib.h> 3#include<time.h> 4 5#define N 100 6 7//FisherYatesを用いて、乱数生成 8 9//ビンゴカード 10void InitArray(int* data, int n) { 11 int i; 12 for (i = 0; i < n; i++) { 13 data[i] = i + 1; 14 } 15} 16//ガラガラ 17void lotteryArray(int* data, int n) { 18 int v; 19 for (v = 0; v < n; v++) { 20 data[v] = v + 1; 21 } 22} 23void Wait(int n) 24{ 25 int i, j; 26 for (i = 0; i < 60000; i++) 27 { 28 for (j = 0; j < 1000 * n; j++) 29 { 30 ; 31 } 32 } 33} 34 35int main(void) 36{ 37 int i, j, count, x; 38 int temp; 39 int v, w, gara; 40 int a[N]; 41 int d[N]; 42 int b[5][5]; 43 int r, c = 5; 44 int atari = 0; 45 int bingo; 46 47 srand((unsigned int)time(NULL)); 48 49 InitArray(a, N); 50 51 52 for (i = N - 1; i >= 1; i--) 53 { 54 x = rand() % (i + 1); 55 temp = a[x]; 56 a[x] = a[i]; 57 a[i] = temp; 58 } 59 60 count = 0; 61 for (i = 0; i < 5; i++) 62 { 63 for (j = 0; j < 5; j++) 64 { 65 b[i][j] = a[count]; 66 count++; 67 } 68 } 69 70 71 printf("これがあなたのビンゴカードです。\n\n"); 72 for (i = 0; i < 5; i++) 73 { 74 for (j = 0; j < 5; j++) 75 { 76 printf("%3d ", b[i][j]); 77 } 78 printf("\n"); 79 } 80 81 printf("\n抽選を開始します!\n\n"); 82 83 srand((unsigned int)time(NULL)); 84 85 lotteryArray(d, N); 86 87 for (v = N - 1; v >= 1; v--) 88 { 89 w = rand() % (v + 1); 90 91 gara = a[w]; 92 a[w] = a[v]; 93 a[v] = gara; 94 95 96 printf("%3d\n", gara); 97 for (r = 0; r < 5; r++) 98 { 99 for (c = 0; c < 5; c++) 100 { 101 if (gara == b[r][c]) 102 { 103 printf(" アタリ\n"); 104 atari = 1; 105 } 106 107 108 } 109 110 111 112 } Wait(1); 113 } 114 for (r = 0; r < 5; r++) { // 行 115 bingo = 1; 116 for (c = 0; c < 5; c++) { 117 if (b[r][c] != atari) bingo = 0; 118 } 119 if (bingo) { 120 121 printf("おめでとう!%d行目がビンゴです!", r); 122 } 123 } 124 for (c = 0; c < 5; r++) { // 列 125 bingo = 1; 126 for (r = 0; r < 5; c++) { 127 if (b[r][c] != atari) bingo = 0; 128 if (bingo) { 129 130 printf("おめでとう!%d列目がビンゴです!", c); 131 } 132 } 133 // 左上から右下の斜め 134 { 135 bingo = 1; 136 for (i = 0; i < 5; i++) { 137 if (b[i][i] != atari) bingo = 0; 138 } 139 if (bingo) { 140 141 printf("おめでとう!左斜めがビンゴです!"); 142 } 143 } 144 // 右上から左下の斜め 145 { 146 bingo = 1; 147 for (i = 0; i < 5; i++) { 148 if (b[i][4 - i] != atari) bingo = 0; 149 } 150 if (bingo) { 151 152 printf("おめでとう!右斜めがビンゴです!"); 153 } 154 } 155 156 } 157 return 0; 158 159}
試したこと
少々長くなってしまって申し訳ありません。
上記のようなソースを書きました。
変数名の変更や、ループの場所を変えたりなどしてみました。アタリ判定まではできたのですが、ビンゴ判定が上手くいきません。
どう直したら良いか、教えてくだいさい。よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/09 04:01