# Sorting# Greedy# Conditional Logic

b964 - 1. 成績指標

🔗 前往 ZeroJudge 原題

題目描述

題目要求讀取一組學生分數,找出及格學生中的最低分數和不及格學生中的最高分數。如果找不到最低及格分數,則輸出 "worst case",如果找不到最高不及格分數,則輸出 "best case"。

解題思路

首先,讀取學生人數和每個學生的分數。然後,使用排序演算法(例如 std::sort)對分數進行排序。排序後,從排序後的陣列中找出不及格的最高分數和及格的最低分數。如果找不到及格的最低分數,輸出 "worst case",如果找不到不及格的最高分數,輸出 "best case"。

複雜度分析

  • 時間複雜度: O(n log n) (主要來自排序演算法)
  • 空間複雜度: O(n) (用於儲存學生分數)

程式碼

#include <iostream>
#include <algorithm>

using namespace std;

int main(){
	
	int p=0,max=101,min=(-1);
	bool max1=false,min1=false;
	while(cin >> p){
		int g[p];
		for(int i=0;i<p;i++){
			cin >> g[i];
		}
		sort(g,g+p);
		for(int i=0;i<p;i++){
			if(g[i]<60){
				if(g[i]>min){
					min=g[i];
					min1=true;
				}
			}
			else if(g[i]>=60){
				if(g[i]<max){
					max=g[i];
					max1=true;
				}
			}
			
			cout << g[i] ;
			if(i!=p-1){
				cout << " ";
			}
		}
		cout << endl;
		if(min1==true){
			cout << min << endl;
		}
		else{
			cout << "best case" << endl;
		}
		if(max1==true){
			cout << max << endl;
		}
		else{
			cout << "worst case" << endl;
		}
		max=101;
		min=(-1);
		max1=false;
		min1=false;
		
	}
}

Discussion