pat 乙级 1020 吃月饼(25)
2017-09-04 21:50
357 查看
总结一下 :(因为涉及到 小数计算 所以 类型 我选择了double)
第一次 提交 :测试点3 无论如何都过不去 。
最后 发现 忽略 两种情况 :
第一 : 所有 库存都满足 不了需求
比如 3 100
1 3 5
10 20 30
需求 100 而三种 月饼 加起来 才1+3+5=9 这种 情况是全要 结果输出 60.00
第二 :
最大月饼 收益 存在 不唯一情况 :
比如 3 100
1 2 3
10 20 30
这里的最大收益都 是一样的 ,所以 这种情况 判断时候也要考虑 ,不然 会出现重复 加 收益的情况 。
在循环遍历的时候 应该标记一下 ,已经取过的月饼 把库存清0;这样就不会 出现重复的问题
代码实现:
#include <stdio.h> #include <iostream> #include <cstdlib> #include <cmath> #include <cctype> #include <string> #include <cstring> #include <algorithm> #include <ctime> using namespace std; double yuebing[1000]; // 月饼平均收益 数组 int main() { int m,n; cin>>m>>n; double a[1000],b[1000]; for (int i = 0; i < m; ++i) { cin>>a[i]; } for (int i = 0; i < m; ++i) { cin>>b[i]; } for (int i=0;i<m;i++) { yuebing[i]=b[i]/a[i]; // 存起来 每种月饼的平均收益 } sort(yuebing,yuebing+m); // 从小到大 排序 double sum=0; for (int i=m-1;i>=0;i--) { for (int j=0;j<m;j++) { if (a[j]!=0 &&b[j]!=0 && b[j]/a[j]+0.0001==yuebing[i]+0.0001) { if (n>a[j]) // 如果需求 大于 库存 全部都要 { sum+=b[j]; n=n-a[j]; // 剩余需求量 a[j]=0; b[j]=0; // 计算过的 清库存 ; if (i==0) { // 所有的月饼库存加起来都满足不了需求 printf("%.2lf",sum); return 0; } break; // 找到符合条件的数之后 记得跳出不然过不了测试点3 。 } else { sum+=b[j]*(n/a[j]); // 需求 小于 库存 按照比例来 然后 return printf("%.2lf",sum); return 0; } } } } }
AC图 :
相关文章推荐
- 1020. 月饼 (25)-PAT乙级
- PAT乙级 1020. 月饼 (25)
- 乙级 PAT 1020. 月饼 (25)
- [PAT乙级]1020. 月饼 (25)
- PAT 乙级 1020. 月饼 (25)
- PAT乙级 1020. 月饼 (25)
- 1020. 月饼 (25) PAT乙级真题
- PAT-乙级-1020. 月饼 (25)
- PAT 乙级练习题1020. 月饼 (25)
- PAT乙级.1020. 月饼 (25)
- PAT乙级—1020. 月饼 (25)-native
- PAT 乙级 1020 月饼 (25)
- PAT乙级 1020. 月饼 (25) C语言
- PAT乙级 1020. 月饼 (25)(只得到23分)
- PAT-乙级-1020. 月饼 (25)
- PAT 乙级 1020.月饼(25)
- 1020. 月饼 (25)-PAT乙级真题
- 【PAT】(乙级)1020. 月饼 (25)
- 1020. 月饼 (25)--浙大PAT乙级真题java实现
- 浙江大学PAT_乙级_1020. 月饼 (25)