《算法笔记》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; }