白駿4344号(c言語)
古いコード
#include <stdio.h>
int main() {
int C = 0; // 테스트 케이스 갯수
int N = 0; // 학생의 수
int score[1000] = { 0 }; // 점수
int sum = 0;
int everage = 0;
int cnt = 0; // 평균보다 점수 높은애들 수 세는 변수
scanf("%d", &C);
for (int i = 0; i < C; i++) {
scanf("%d", &N);
for (int j = 0; j < N; j++) {
scanf("%d", score[i]);
sum += score[i];
}
// 1. 평균을 때린다.
everage = sum / N;
// 2. 평균보다 점수가 높은 애들 퍼센트를 낸다.
for (int j = 0; j < N; j++) {
if (everage < score[i]) {
cnt++;
}
}
printf("%d", cnt / N);
}
}
修正が必要な部分
変数の位置
まず,scoreとsum変数はC(テスト個数)に等しいfor文に置くべきである.
他の学生の採点のたびに0にリセットする必要があります
配列インデックスの使用
これは犯すべきでないエラーで、socre配列インデックスをfor文に変換し、sumのコードにn(学生数)に関するインデックスを加えるべきだが、C(テスト数)に関するインデックスを加えるべきだ.
データ型、変換フォーマット
これはずっと問題になっている部分で、実際には他の問題は結果値を見て修正することができますが、この部分は学習不足の部分です.
int everage = 0; => double everage = 0.00;
everage = sum/N; => everage = (double)sum/N;
printf("%d", cnt/N); => printf("%.3f%%\n", (double)cnt * 100/N);
コードの変更
#include <stdio.h>
int main() {
int C = 0; // 테스트 케이스 갯수
int N = 0; // 학생의 수
scanf("%d", &C);
for (int i = 0; i < C; i++) {
scanf("%d", &N);
int sum = 0;
int score[1000] = { 0 }; // 점수
double everage = 0.00;
for (int j = 0; j < N; j++) {
scanf("%d", &score[j]);
sum += score[j];
}
// 1. 평균을 때린다.
everage = (double)sum / N;
// 2. 평균보다 점수가 높은 애들 퍼센트를 낸다.
int cnt = 0; // 평균보다 점수 높은애들 수 세는 변수
for (int j = 0; j < N; j++) {
if (everage < score[j]) {
cnt++;
}
}
printf("%.3f%%\n", (double)cnt * 100 / N);
}
return 0;
}
ソース:https://www.acmicpc.net/problem/4344Reference
この問題について(白駿4344号(c言語)), 我々は、より多くの情報をここで見つけました https://velog.io/@dogit/백준-4344번-c언어テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol