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 支铅笔最少需要花费多少钱。

👉求最小花费


思路

  1. 将三种包装需要的钱都求出来
  2. 进行比较后取出最小的方案

代码解析

#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. 总结与复盘

  • 总结经验:记录解题过程中遇到的问题和解决方法。

  • 复盘优化:思考是否有更好的解决方案或改进空间。

通过以上步骤,可以系统地解决模拟问题,确保代码的正确性和高效性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值