hdu 2187 悼念512汶川大地震遇难同胞——老人是真饿了

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2187

题目简问:

解题思路:

已知给出了 总钱数 和 一共的种类

1. 对给出的大米,按照价格进行升序,即让最便宜的大米排在最上面

2. 如果当前的 大米单价*数量>总钱数,则 一共能买 sum+= 总钱数/单价 

   否则 sum+=当前大米的总重量,同时总钱数-=大米单价*数量。

3.输出 sum 即可,注意格式。

AC 代码:

#include <stdio.h>
#include <stdlib.h>
struct N
{
    int dj,zl;
};
int cmp(const void *a,const void *b)
{
    N *a1=(N *)a;
    N *b1=(N *)b;
    return a1->dj - b1->dj;
}
int main(void)
{
    int c,tp,i;
    double mo,sum;
    struct N n[1010];
    scanf("%d",&c);
    while(c--)
    {
        sum=0;
        scanf("%lf%d",&mo,&tp);
        for(i=0; i<tp; i++)
        {
            scanf("%d%d",&n[i].dj,&n[i].zl);
        }
        qsort(n,tp,sizeof(n[0]),cmp);
        for(i=0; i<tp; i++)
        {
            if((n[i].dj*n[i].zl)>=mo)
            {
                sum+=mo/(n[i].dj);
                break;
            }
            else
            {
                mo-=(n[i].dj*n[i].zl);
                sum+=n[i].zl;
            }
        }
        printf("%.2f
",sum);
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/A--Q/p/5715084.html