《算法笔记》PAT B1020 月饼、PAT B1023 组个最小数

PAT B1020

 

 思路:总是选择单价最高的月饼出售,可获得最大利润

将月饼按单价由高到低排序,开始枚举。如果当前需求量大于月饼的库存,收益增加为该月饼的总售价,需求量减去该月饼的库存;如果当前需求小于月饼的库存,收益增加为当前需求量乘以该月饼鹅单价,需求量减为0,退出循环。

#include<cstdio>
#include<algorithm>
using namespace std;

struct Mooncake{
    double stock;
    double sell_money;
    double price;
}mooncake[1010];

bool cmp(Mooncake a,Mooncake b)
{
    return a.price>b.price;
}
int main()
{
    int n,d;
    double ans=0;//收益
    scanf("%d%d",&n,&d);
    for(int i=0;i<n;i++)
    {
        scanf("%lf",&mooncake[i].stock);
    }
    for(int i=0;i<n;i++)
    {
        scanf("%lf",&mooncake[i].sell_money);
        mooncake[i].price=mooncake[i].sell_money/mooncake[i].stock;
    }
    sort(mooncake,mooncake+n,cmp);
    for(int i=0;i<n;i++)
    {
        if(d<=mooncake[i].stock)
        {
            ans+=mooncake[i].price*d;
            break;
        }
        else
        {
           ans+=mooncake[i].sell_money;
           d-=mooncake[i].stock;
        }
    }
    printf("%.2f\n",ans);
    return 0;
}

 

PAT B1023

 

 思路:第一个选不是零的最小的数,接着每次选最小的数输出。

#include<cstdio>
using namespace std;


int main()
{
    int a[10];
    for(int i=0;i<10;i++)
    {
        scanf("%d",&a[i]);
    }
    for(int i=1;i<=9;i++)
    {
        if(a[i]!=0)
        {
            printf("%d",i);
            a[i]--;
            break;
        }
    }
    for(int i=0;i<10;i++)
    {
        for(int j=0;j<a[i];j++)
            printf("%d",i);
    }
    printf("\n");
    return 0;
}

 

posted @ 2021-02-03 10:03  inss!w!  阅读(69)  评论(0编辑  收藏  举报