# Greedy# Basic Math

k182 - 資訊科技小考成績

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算文文資訊科技小考的平均成績,並將結果四捨五入到小數點以下第二位,然後移除尾部的零和小數點。

解題思路

程式首先讀取小考次數 n,然後迴圈讀取每次的成績,將成績乘以 1000 加到 sum 變數中。迴圈結束後,將 sum 除以 n 得到平均成績。接著,程式進行四捨五入,如果 sum 除以 10 的餘數大於等於 5,則將 sum 除以 10 後加 1;否則,直接將 sum 除以 10。最後,程式根據 sum 的值,以不同的格式輸出平均成績,去除尾部的 0 和不必要的小數點。

複雜度分析

  • 時間複雜度: O(n)
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int n,sum,x;
int main(){
	cin >> n;
	for(int i=0;i<n;++i){
		cin >> x;
		sum+=x*1000;
	}
	sum/=n;
	if(sum%10>=5){
		sum/=10;
		++sum;
	}
	else{
		sum/=10;
	}
	if(sum%100==0){
		cout << sum/100;
	}
	else if(sum%10==0){
		cout << sum/100 << "." << sum%100/10;
	} 
	else{
		cout << sum/100 << "." << sum%100;
	}
}

Discussion