题解:UVA11780 Miles 2 Km

封面

思路:

对于用斐波那契数列将距离从英里转换为公里,我们可以发现一个性质,误差最小的公里数必然是距离真实值 1.6×n1.6 \times n 最近的两个整数之一

通过拆分英里数,我们可以用斐波那契数列中小的数组合出任何大于等于 22 的整数公里数。所以我们也可以组合出与真实值最近的两个整数,我们只需要在两个整数与真实值的差中取最小值就好了。

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define itn int
#define ull unsigned long long
int n;
int main(){
//ios::sync_with_stdio(0);
//cin.tie(0);cout.tie(0);
while(cin>>n){
if(!n)break;
int a=1.6*n,b=a+1;
printf("%.2lf\n",min(abs(1.6*n-a),abs(b-1.6*n)));
}
return 0;
}