文具订购
【题目描述】
小明的班上共有n 元班费,同学们准备使用班费集体购买3 种物品:
1. 圆规,每个7 元。
2. 笔,每支4 元。
3. 笔记本,每本3 元。
小明负责订购文具,设圆规,笔,笔记本的订购数量分别为a,b,c,他订购
的原则依次如下:
1. n 元钱必须正好用光,即7a+4b+3c=n。
2. 在满足以上条件情况下,成套的数量尽可能大,即a,b,c 中的最小值尽
可能大。
3. 在满足以上条件情况下,物品的总数尽可能大,即a+b+c 尽可能大。
请你帮助小明求出满足条件的最优方案。可以证明若存在方案,则最优方案
唯一。
【输入格式】
从文件order.in 中读入数据。
仅一行一个整数n 表示班费数量。
【输出格式】
输出到文件order.out 中。
若方案不存在则输出-1。否则输出一行三个用空格分隔的非负整数a,b,c
表示答案。
【样例1 输入】
1
【样例1 输出】
-1
【样例2 输入】
14
【样例2 输出】
1 1 1
【样例3 输入】
33
题目是复制的,先将就看,北京慧明教育科技发展有限公司祝您学习进步
【样例3 输出】
1 2 6
【样例3 解释】
a=2,b=4,c=1 也是满足条件1,2 的方案,但对于条件3,该方案只买了7
个物品,不如a=1,b=2,c=6 的方案。
【数据范围与提示】
对于测试点1 ~ 6:n ≤ 14。
对于测试点7 ~ 12:n 是14 的倍数。
对于测试点13 ~ 18:n ≤ 100。
对于所有测试点:0 ≤ n ≤ 105。
【时间限制】
1.0s
【空间限制】
256MB
题目是复制的,先将就看,北京慧明教育科技发展有限公司祝您学习进步
【上传文件】
上传c, cpp 或pas 语言源程序,文件名应依次为order.c, order.cpp,
order.pas。
#include
#include
using namespace std;
int main(void)
{
int n;
cin >> n;
if(0 == n)//班费为0元时要特判
{
cout<<"0 0 0"<= 0;
a--)//枚举最小值,即圆规的数量
{
for(int b = a;
b <= (n-(a*7)) / 4;
b++)//枚举笔的数量
{
for(int c = a;
c <= (n-(a*7)-b*4) / 3;
c++) //枚举笔记本的数量
{
if(a * 7 + b * 4 + c * 3 == n)
{
cout << a << " " << b << " " << c << endl;
return 0;
}
}
}
}cout << "-1" << endl;
//无解
return 0;
}
【[算法练习][枚举][c/c++]文具订购】
推荐阅读
- 人工智能|干货!人体姿态估计与运动预测
- 分析COMP122 The Caesar Cipher
- 技术|为参加2021年蓝桥杯Java软件开发大学B组细心整理常见基础知识、搜索和常用算法解析例题(持续更新...)
- C语言学习(bit)|16.C语言进阶——深度剖析数据在内存中的存储
- Python机器学习基础与进阶|Python机器学习--集成学习算法--XGBoost算法
- 数据结构与算法|【算法】力扣第 266场周赛
- 数据结构和算法|LeetCode 的正确使用方式
- leetcode|今天开始记录自己的力扣之路
- 人工智能|【机器学习】深度盘点(详细介绍 Python 中的 7 种交叉验证方法!)
- 网络|简单聊聊压缩网络