D. Vus the Cossack and Numbers

  比较容易想到,对于每个a[i]下取整,然后再把它的小数不和取和,那么求和是正的就需要补正的,求和是负的就需要补充负的。这个题是要注意浮点数运算精度问题,用eps卡下一下精度,eps取1e-8就可以。还有下取整上取整函数取到的数还是浮点数。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int MAXN=1e5+5;
 4 const double eps=1e-8;
 5 double a[MAXN];
 6 int b[MAXN];
 7 int main()
 8 {
 9     int n;cin>>n;double sum=0;
10     for(int i=1;i<=n;i++)
11     {
12         scanf("%lf",&a[i]);
13         b[i]=floor(a[i]);
14         sum+=a[i]-b[i];
15     }
16     for(int i=1;i<=n;i++)
17     {
18         if(fabs(a[i]-b[i])<eps)
19             printf("%d\n",b[i]);
20         else if(fabs(sum-0)>eps)
21         {
22             if(sum>0) 
23             {
24                 sum--;
25                 printf("%d\n",b[i]+1);
26             }
27             else
28             {
29                 sum++;
30                 printf("%d\n",b[i]-1);
31             }
32         }
33         else printf("%d\n",b[i]);
34     }
35     return 0;    
36  } 

猜你喜欢

转载自www.cnblogs.com/Msmw/p/11113492.html