# Greedy# Conditional Statements# Basic Arithmetic

j055 - 11777 - Automate the Grades

🔗 前往 ZeroJudge 原題

題目描述

題目要求根據七個輸入分數(Term 1, Term 2, Final, Attendance, Class Test 1, Class Test 2, Class Test 3)計算學生的總分,並根據總分給出對應的字母等級(A, B, C, D, F)。班級考試的評分方式是取最好的兩個考試成績的平均值。

解題思路

程式首先讀取測資數量 n。然後,對於每個測資,程式讀取七個分數。計算總分時,將 Term 1, Term 2, Final 和 Attendance 的分數直接加總。對於班級考試,程式找到最好的兩個分數,計算它們的平均值,並將其加到總分中。最後,程式根據總分判斷對應的字母等級,並輸出結果。

複雜度分析

  • 時間複雜度: O(n),其中 n 是測資數量。對於每個測資,程式執行常數次操作,包括讀取輸入、計算總分和判斷等級。
  • 空間複雜度: O(1),程式使用固定大小的陣列 a 來儲存輸入分數,陣列大小為 7,不隨測資數量變化。

程式碼

#include <iostream>
using namespace std;
int a[7],n;
int main(){
	cin.tie(0); ios::sync_with_stdio(0);
	cin >> n;
	for(int ca=1;ca<=n;++ca){
		int sum=0;
		for(int i=0;i<7;++i){
			cin >> a[i];
			if(i<4)sum+=a[i];
		}
		sum+=(a[4]+a[5]+a[6]-min(a[4],min(a[5],a[6])))/2;
		cout << "Case " << ca << ": ";
		if(sum>=90){
			cout << "A\n";
		}
		else if(sum>=80){
			cout << "B\n";
		}
		else if(sum>=70){
			cout << "C\n";
		}
		else if(sum>=60){
			cout << "D\n";
		}
		else{
			cout << "F\n";
		}
	}
}

Discussion