[算法练习][枚举][c/c++]文具订购

文具订购 【题目描述】
小明的班上共有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++]文具订购】

    推荐阅读