C言語で練習問題を解いています。行き詰まってしまったのでご教示いただけますでしょうか。
問題は以下のようなものです。
標準入力で参加者N、数M、発表された数Kが与えられます。N人の参加者はM以下の数からM個好きな数字を選んでメモします。その後、数Kが発表されて、参加者がメモした数の中に発表された数Kが何個含まれるかカウントせよ(ビンゴのような感じです)という問題です。
入力例
4 5 2
1 3 4 4 5
2 2 2 2 2
1 2 3 4 5
1 1 1 1 1
(入力例、参加者N=4人の書いた数字が横並び半角スペースで入力される。今回はM=5で5以下の数字から好きな数字を5個選ぶ。発表された数字K=2なので一人目は0個、二人目は5個…とカウントする。)
出力
0
5
1
0
私が書いたコード
#include <stdio.h>
#include <stdlib.h>
int main(void){
char buf[1000];
int n;
int m;
int q;
int count = 0;
fgets(buf,sizeof(buf), stdin);
sscanf(buf, "%d %d %d", &n, &m, &q);
int number;
number= malloc(sizeof(int) n);
for (int i = 0; i < n; i++) {
number[i] = malloc(sizeof(int) * m);
}
for(int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int x;
scanf("%d", &x);
number[i][j] = x;
if(number[i][j] == q) {
count++;
}
}
printf("%d\n", count);
}
}
<問題点>
入力例を上記と同じもので実行したところ、
0
5
6
6
となったので、カウントした数を足してしまっている(?)
カウントした数がどんどん足し合わされないようにするにはどうしたら良いでしょうか…?
回答2件
あなたの回答
tips
プレビュー