P1909 [NOIP 2016 普及组] 买铅笔
记录33
#include <bits/stdc++.h>
using namespace std;
int f(int n,int m,int p){if(n%m==0) return n/m*p;else return (n/m+1)*p;
}
int main(){int n,a,b,c,a1,a2,b1,b2,c1,c2;cin>>n>>a1>>a2>>b1>>b2>>c1>>c2;a=f(n,a1,a2);b=f(n,b1,b2);c=f(n,c1,c2);int t=min(a,min(b,c));cout<<t;return 0;
}
题目传送门
https://www.luogu.com.cn/problem/P1909
突破点
商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过 n 支铅笔才够给小朋友们发礼物。👉打包思想
在商店每种包装的数量都足够的情况下,要买够至少 n 支铅笔最少需要花费多少钱。
👉求最小花费
思路
- 将三种包装需要的钱都求出来
- 进行比较后取出最小的方案
代码解析
#include <bits/stdc++.h>
using namespace std;
int f(int n,int m,int p){if(n%m==0) return n/m*p;else return (n/m+1)*p;
}
int main(){......return 0;
}
设置一个函数,传进来需要的参数,(需要数量,包装内铅笔的数量,价格)
最后返回花费的钱
if(n%m==0) return n/m*p; 如果数量刚好够,就直接算价钱
else return (n/m+1)*p; 如果不够就多买一份,然后算价钱
#include <bits/stdc++.h>
using namespace std;
int f(int n,int m,int p){if(n%m==0) return n/m*p;else return (n/m+1)*p;
}
int main(){int n,a,b,c,a1,a2,b1,b2,c1,c2;cin>>n>>a1>>a2>>b1>>b2>>c1>>c2;a=f(n,a1,a2);b=f(n,b1,b2);c=f(n,c1,c2);int t=min(a,min(b,c));cout<<t;return 0;
}
int t=min(a,min(b,c)); 对三种包装进行价格比较,取出最小的价格
补充
在CSP-J算法竞赛中,模拟问题要求选手根据题目描述的规则或流程,通过编程实现对问题的模拟。这类问题考察选手对问题的理解能力、逻辑思维能力以及代码实现能力。以下是解决模拟问题的思路和技巧:
1. 仔细阅读题目
理解问题描述:明确题目要求,理解每个操作的具体含义。
确定输入输出格式:清楚输入数据的格式和输出结果的格式要求。
2. 分析问题步骤
分解问题:将复杂问题分解为多个小步骤,逐步解决。
确定模拟流程:明确每个步骤的操作对象和操作顺序。
3. 设计数据结构
选择合适的数据结构:根据问题需求选择数组、链表、队列等数据结构。
初始化数据:根据题目初始条件设置数据的初始状态。
4. 模拟操作
逐步模拟:按照题目规则逐步模拟每个操作。
状态更新:在模拟过程中及时更新数据结构中的状态。
5. 处理边界条件
考虑特殊情况:如输入为空、极端值等。
验证边界情况:确保代码在边界条件下也能正确运行。
6. 代码实现
遵循编码规范:使用有意义的变量名,添加注释,提高代码可读性。
逐步实现:先实现核心逻辑,再逐步完善细节。
7. 测试与验证
测试样例:使用题目提供的样例输入验证代码的正确性。
自定义测试用例:设计边界用例和特殊用例,检查代码的健壮性。
8. 优化代码
时间优化:减少不必要的计算,采用更高效算法。
空间优化:合理使用内存,避免内存溢出。
9. 调试技巧
输出中间结果:在关键步骤输出变量值,检查逻辑是否正确。
使用调试工具:利用调试器定位问题。
10. 总结与复盘
总结经验:记录解题过程中遇到的问题和解决方法。
复盘优化:思考是否有更好的解决方案或改进空间。
通过以上步骤,可以系统地解决模拟问题,确保代码的正确性和高效性。
