寝癖頭の解法

学習中の覚え書きを投稿、更新していきます。

C言語によるクラス分け

C言語によるクラス分けです。
人数と成績から、クラス分けを判断するプログラムです。

・問題
 会津進学塾では、生徒が塾に入る際に実力テストを行ってクラス分けをします。
 テストは数学、英語、国語の 3 科目行い、生徒を A,B,C クラスにクラス分けします。
 A クラスのレベルが一番高く、順に低くなっていきます。
 クラス分けの判断は以下の表に基づきます。

クラス分けの判断
条件 クラス
100 点の科目がある A
数学と英語の平均点が 90 点以上 A
3 科目の平均点が 80 点以上 A
3 科目の平均点が 70 点以上 B
3 科目の平均点が 50 点以上で数学か英語が 80 点以上 B
上の条件を満たさない C
 複数の条件を満たす場合は、よりレベルの高いクラスに分けられます。
 生徒の人数 n (1 ≤ n ≤ 10000)、各生徒の数学の点数 pmi (0 ≤ pmi ≤ 100)、英語の点数 pei (0 ≤ pei ≤ 100)、国語の点数 pji (0 ≤ pji ≤ 100) を入力とし、各生徒のクラスA,B,C (半角英字) を出力するプログラムを作成してください。

・入力される値
 複数のデータセットの並びが入力として与えられます。
 入力の終わりはゼロひとつの行で示されます。
  各データセットは以下の形式で与えられます。
   n
   pm1 pe1 pj1
   pm2 pe2 pj2
   :
   pmn pen pjn
 入力はすべて整数で与えられます。データセットの数は 1000 を超えません。

・期待する出力
 入力データセットごとに、各生徒のクラスを順番に出力します。

僕が作成、提出したコードは、以下のとおりです。

/*
 Problem Set from Volume2 0218 : Dividing Students
 http://judge.u-aizu.ac.jp/
 C言語によるクラス分け
 https://neguse-atama.hatenablog.com
*/
#include<stdio.h>
int main(void){
    int i,n,pm,pe,pj;
    while(1){
        scanf("%d",&n);
        if(n==0){
            break;
        }
        for(i=0;i<n;i++){
            scanf("%d %d %d",&pm,&pe,&pj);
            if(pm==100 || pe==100 || pj==100){
                printf("A\n");
            }else if(((pm+pe)/2)>=90){
                printf("A\n");
            }else if(((pm+pe+pj)/3)>=80){
                printf("A\n");
            }else if(((pm+pe+pj)/3)>=70){
                printf("B\n");
            }else if((((pm+pe+pj)/3)>=50) && (pm>=80 || pe>80)){
                printf("B\n");
            }else{
                printf("C\n");
            }
        }
    }
    return 0;
}

設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/
Problem Set from Volume2 0218 : Dividing Students