Codeforces Round #204 (Div. 2) C. Jeff and Rounding——数学规律

给予N*2个数字,改变其中的N个向上进位,N个向下进位,使最后得到得数与原来数的差的绝对值最小

考虑小数点后面的数字,如果这些数都非零,则就是  abs(原数小数部分相加-1*n), 多一个0 则 min( abs(原数小数部分相加-1*n) ,abs(原数小数部分相加-1*(n-1)) )以此类推

#include<stdio.h>
int abs(int a){
    if(a<0)return -a;
    else return a;
}

int Min(int a,int b){
    if(a<b)return a;
    else return b;
}

int main(){
    int n,i;
    while(scanf("%d",&n)!=EOF){
        int n2=n*2;
        int ret=9999999,temp,all=0,k=0;
        for(i=1;i<=n2;i++){
            scanf("%*d.%d",&temp);
            all+=temp;
            if(temp==0)k++;
        }
        for(i=0;i<=k;i++){
            ret=Min(ret,abs(all-(1000*n-1000*i)));
        }
        printf("%d.%03d
",ret/1000,ret%1000);
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/huhuuu/p/3361457.html