文具訂購
【題目描述】
小明的班上共有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 <iostream>
#include <cstdio>
using namespace std;
int main(void)
{
int n;
cin >> n;
if(0 == n) //班費爲0元時要特判
{
cout<<"0 0 0"<<endl;
return 0;
}
for(int a = n / 14; a >= 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;
}