# Sorting# Conditional Statements

d659 - 11727 - Cost Cutting

🔗 前往 ZeroJudge 原題

題目描述

題目描述了 XYZ 股份有限公司因金融海嘯需要削減支出,並決定裁掉薪水最高和最低的兩位員工。給定三位員工的薪水,要求找出不會被裁員的員工的薪水。

解題思路

題目要求找出三數中介數。程式碼直接使用一系列的 if-else 條件判斷來比較三個薪水,並找出中間值。雖然程式碼的邏輯是正確的,但可以簡化為先對三個數字進行排序,然後直接輸出中間的數字。

複雜度分析

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

程式碼

#include <iostream>

using namespace std;

int main(){
	
	int n=0;
	while(cin >> n){
		int m[3][n];
		for(int i=0;i<n;i++){
			for(int j=0;j<3;j++){
				cin >> m[j][i];
			}
		}
		for(int j=0;j<n;j++){
			if(m[0][j]>=m[1][j]&&m[1][j]>=m[2][j]){
				cout << "Case " << j+1 << ": " << m[1][j] << endl;
			}
			else if(m[0][j]<=m[1][j]&&m[1][j]<=m[2][j]){
				cout << "Case " << j+1 << ": " << m[1][j] << endl;
			}
			else if(m[2][j]>=m[0][j]&&m[1][j]>=m[2][j]){
				cout << "Case " << j+1 << ": " << m[2][j] << endl;
			}
			else if(m[2][j]<=m[0][j]&&m[1][j]<=m[2][j]){
				cout << "Case " << j+1 << ": " << m[2][j] << endl;
			}
			else if(m[0][j]>=m[1][j]&&m[2][j]>=m[0][j]){
				cout << "Case " << j+1 << ": " << m[0][j] << endl;
			}
			else if(m[0][j]<=m[1][j]&&m[2][j]<=m[0][j]){
				cout << "Case " << j+1 << ": " << m[0][j] << endl;
			}
		}
		
		
	}
	
}

Discussion