#6
by かずま » 7年前
穴をあけた時、ビンゴにならなくても、二重ループを抜けて
次の num の入力に行ったほうがよいでしょう。
そこで、i = N; break; を追加することで、内側の j のループを
抜けた後、外側の i のループも終了するようにしました。
コード:
#include <stdio.h> // scanf, printf, putchar, puts
#include <stdlib.h> // srand, rand
#include <time.h> // time
#define N 5 // N は 3, 5, 7, 9
int main(void)
{
int i, j, k = 0, num = 100, x[N][N], c[100];
for (i = 0; i < 100; i++) c[i] = i; // ビンゴ表作成
srand(time(NULL));
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
c[x[i][j] = rand() % num] = c[--num];
x[N/2][N/2] = -1;
while (k != N) { // ビンゴ実行
for (i = 0; i < N; i++, putchar('\n')) // ビンゴ表出力
for (j = 0; j < N; j++) printf("%3d", x[i][j]);
printf("num = "); // 入力
if (scanf("%d", &num) != 1) return 1;
for (i = 0; i < N && k != N; i++) // ビンゴ検出
for (j = 0; j < N; j++)
if (x[i][j] == num) {
x[i][j] = -1; // 穴開け
for (k = 0; k < N && x[k][j] == -1; k++) ;
if (k == N) break; // 縦ビンゴ
for (k = 0; k < N && x[i][k] == -1; k++) ;
if (k == N) break; // 横ビンゴ
if (i == j) {
for (k = 0; k < N && x[k][k] == -1; k++) ;
if (k == N) break; // 斜め右下ビンゴ
}
else if (i + j == N - 1) {
for (k = 0; k < N && x[k][N - 1 - k] == -1; k++) ;
if (k == N) break; // 斜め右上ビンゴ
}
i = N;
break;
}
}
puts("bingo");
return 0;
}
穴をあけた時、ビンゴにならなくても、二重ループを抜けて
次の num の入力に行ったほうがよいでしょう。
そこで、i = N; break; を追加することで、内側の j のループを
抜けた後、外側の i のループも終了するようにしました。
[code]
#include <stdio.h> // scanf, printf, putchar, puts
#include <stdlib.h> // srand, rand
#include <time.h> // time
#define N 5 // N は 3, 5, 7, 9
int main(void)
{
int i, j, k = 0, num = 100, x[N][N], c[100];
for (i = 0; i < 100; i++) c[i] = i; // ビンゴ表作成
srand(time(NULL));
for (i = 0; i < N; i++)
for (j = 0; j < N; j++)
c[x[i][j] = rand() % num] = c[--num];
x[N/2][N/2] = -1;
while (k != N) { // ビンゴ実行
for (i = 0; i < N; i++, putchar('\n')) // ビンゴ表出力
for (j = 0; j < N; j++) printf("%3d", x[i][j]);
printf("num = "); // 入力
if (scanf("%d", &num) != 1) return 1;
for (i = 0; i < N && k != N; i++) // ビンゴ検出
for (j = 0; j < N; j++)
if (x[i][j] == num) {
x[i][j] = -1; // 穴開け
for (k = 0; k < N && x[k][j] == -1; k++) ;
if (k == N) break; // 縦ビンゴ
for (k = 0; k < N && x[i][k] == -1; k++) ;
if (k == N) break; // 横ビンゴ
if (i == j) {
for (k = 0; k < N && x[k][k] == -1; k++) ;
if (k == N) break; // 斜め右下ビンゴ
}
else if (i + j == N - 1) {
for (k = 0; k < N && x[k][N - 1 - k] == -1; k++) ;
if (k == N) break; // 斜め右上ビンゴ
}
i = N;
break;
}
}
puts("bingo");
return 0;
}