a286 - 難道這就是命中注定
題目描述
題目要求計算一個正妹和她的追求者們的「特別數」,並找出特別數與正妹特別數最接近的追求者編號。特別數的計算方式是將出生年月日的所有數字相加,重複此過程直到結果為個位數。如果有多個追求者的特別數與正妹的特別數差距相同,則輸出編號較小的追求者。
解題思路
首先,計算正妹的特別數。然後,對於每個追求者,計算其特別數,並計算其特別數與正妹特別數的差的絕對值。記錄最小的差值以及對應的追求者編號。最後,輸出編號最小的追求者編號。
複雜度分析
- 時間複雜度: 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;
}
}
}
}