题目大意
给定小数
n 和
30 个小数
ai。你需要进行两种操作:
- n←n+ai
- n←n×(1+100ai)
思路
显然可以发现,对于
n<100 时,方案一的结果比方案二大;对于
n>100 时,方案二的结果比方案一的结果更大(
结尾有证明)。在代码实现过程中,
n=100 可以
任意归在两种方案中,结果不变。记得存
double 类型。
代码
CPP#include<bits/stdc++.h>
using namespace std;
int main()
{
double n,ans;
cin>>ans;
for(int i=0;i<30;i++)
{
cin>>n;
if(ans>=100) ans*=(1.000+n/1.000/100);
else ans+=n;
}
cout<<fixed<<setprecision(10)<<ans;
return 0;
}
补充证明
∵100n<1∴n+ai=n×1+ai×1>n×1+ai×100n=n×(1+100ai)即 n+ai>n×(1+100ai)
所以方案一的结果大于方案二的结果。
∵100n>1∴n+ai=n×1+ai×1<n×1+ai×100n=n×(1+100ai)即 n+ai<n×(1+100ai)
所以方案一的结果小于方案二的结果。
∵100n=1∴n+ai=n×1+ai×1=n×1+ai×100n=n×(1+100ai)即 n+ai=n×(1+100ai)
所以当
n=100 时归在方案一还是方案二结果都相等。