# Modulo Operation# Greedy# Array

a286 - 難道這就是命中注定

🔗 前往 ZeroJudge 原題

題目描述

題目要求計算一個正妹和她的追求者們的「特別數」,並找出特別數與正妹特別數最接近的追求者編號。特別數的計算方式是將出生年月日的所有數字相加,重複此過程直到結果為個位數。如果有多個追求者的特別數與正妹的特別數差距相同,則輸出編號較小的追求者。

解題思路

首先,計算正妹的特別數。然後,對於每個追求者,計算其特別數,並計算其特別數與正妹特別數的差的絕對值。記錄最小的差值以及對應的追求者編號。最後,輸出編號最小的追求者編號。

複雜度分析

  • 時間複雜度: O(n),其中 n 是追求者的數量。因為需要遍歷所有追求者來計算特別數和差值。
  • 空間複雜度: O(n),因為需要一個大小為 n 的陣列 t 來儲存每個追求者的特別數與正妹特別數的差的絕對值。

程式碼

#include <iostream>
using namespace std;
int main(){
	int a,b,c,s,n,abc;
	while(cin >> a >> b >> c){
		abc=(a*10000+b*100+c)%9;
		(abc==0)?s=9:s=abc;
		cin >> n;
		int t[n],min=11;
		for(int i=0;i<n;++i){
			int x=0;
			cin >> a >> b >> c;
			abc=(a*10000+b*100+c)%9;
			(abc==0)?x=9:x=abc;
			t[i]=abs(x-s);
			if(t[i]<min)min=t[i];
		}
		for(int i=0;i<n;++i){
			if(t[i]==min){
				cout << i+1 << "\n";
				break;
			}
		}
	}
}

Discussion