//======================================================================
// Contents    : AOJ ITP1_7_A
//               あるクラスの数学の成績を付ける
//               中間試験、期末試験のいずれかを欠席した場合成績は F。
//               中間試験と期末試験の合計点数が 80 以上ならば成績は A 。
//               中間試験と期末試験の合計点数が 65 以上 80 未満ならば成績は B。
//               中間試験と期末試験の合計点数が 50 以上 65 未満ならば成績は C。
//               中間試験と期末試験の合計点数が 30 以上 50 未満ならば成績は D。
//                 →ただし、再試験の点数が 50 以上ならば成績は C。
//               中間試験と期末試験の合計点数が 30 未満ならば成績は F。
// Input       : 中間試験の点数 score_m、期末試験の点数 score_f、再試験の点数 r
//               試験を受けていない場合は点数を -1 とする
// Output      : 成績（A、B、C、D、または F）
// Constraints : 0 ≦ m, f ≤ 50、   0 ≦ r ≤ 100
//               データセットの数（生徒の数）は 50 以下
//               m、f、r がすべて -1 のとき入力の終わり
// Author      : 廣部智也
// LastUpdate  : 2020/06/28
// Since       : 2020/06/28
//======================================================================

#include <stdio.h>
#include <stdlib.h>                                                       // exit 関数を使用するため

#define LOWER_LIMIT_m_f  -1
#define UPPER_LIMIT_m_f  50
#define LOWER_LIMIT_r    -1
#define UPPER_LIMIT_r   100

// 入力エラーを判断する関数
int Input_error( int number, int lower_limit, int upper_limit );

// 成績を判断し出力する関数
void Grade( int score_m, int score_f, int score_r );



int main(){

    int score_m = 0, score_f = 0, score_r = 0;

    int i = 0;

    while( i < 50){
    
        // データの入力
        scanf("%d %d %d", &score_m , &score_f , &score_r );

        Input_error( score_m , LOWER_LIMIT_m_f, UPPER_LIMIT_m_f );
        Input_error( score_f , LOWER_LIMIT_m_f, UPPER_LIMIT_m_f );
        Input_error( score_r , LOWER_LIMIT_r, UPPER_LIMIT_r );

        if( score_m == -1 && score_f == -1 && score_r == -1 ){              // 入力終了の判断
            break;
        }

        // データの処理と出力
        Grade( score_m, score_f, score_r );

        i++;
    }

    return 0;
}



//=========================================================================
// Contents    : 成績を判断し出力する
// Author      : 廣部智也
// LastUpdate  : 2020/06/28
// Since       : 2020/06/28
//=========================================================================

void Grade( int score_m, int score_f, int score_r ){

    if( score_m == -1 || score_f == -1 || ( score_m + score_f ) < 30 ){
            printf("F\n");
        }
        
    else if( score_m + score_f >= 80 ){
        printf("A\n");
    }
        
    else if( score_m + score_f >= 65 ){
        printf("B\n");
    }
        
    else if( ( score_m + score_f >= 50 ) || ( score_r >= 50 ) ){
        printf("C\n");
    }
        
    else if( score_m + score_f >= 30 ){
       printf("D\n");
    }
        
    else{
        printf("error\n");
    }
    
    return;
}



//============================================================
// Contents    : 入力エラーを判断
// Input       : 調べる変数, 下限, 上限
// Output      : エラーなら強制終了
// Author      : 廣部智也
// LastUpdate  : 2020/06/05
// Since       : 2020/06/05
//============================================================

int Input_error( int number, int lower_limit, int upper_limit ){
    
    if( number < lower_limit || number > upper_limit ){
        printf("Input error\n");
        exit(1);
    }

    return 0;
}




Measured memory_bytes: 2024