SGU 152 Making round(水~)

Description
给出n个数,输出这n个数占总数的百分比(如果不是整数则上下取整),且保证n个百分比和为100
Input
第一行一整数n表示数的个数,第二行n个整数ai(1<=n<=10000,0<=ai<=10000)
Output
输出n个数占总数的百分比,使得其和为100
Sample Input
2
10 10
Sample Output
50 50
Solution
水题,不是整数的先下取整,最后通过给这些不是整数的数补1一直补到总数为100
Code

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define maxn 11111
#define eps 1e-9
int n,sum,all,a[maxn],b[maxn],flag[maxn];
int main()
{
    scanf("%d",&n);
    sum=0,all=100;
    memset(flag,0,sizeof(flag));
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        sum+=a[i]; 
    }
    for(int i=1;i<=n;i++)
    {
        b[i]=(int)(100.0*a[i]/sum);
        if(abs(100.0*a[i]/sum-b[i])<eps)flag[i]=1;
        all-=b[i];
    }
    for(int i=1;i<=n;i++)
        if(all&&!flag[i])printf("%d ",b[i]+1),all--;
        else printf("%d ",b[i]);
    printf("\n");
    return 0;
}

你可能感兴趣的:(SGU 152 Making round(水~))