农夫约翰收到了一份牛奶订单,订购 M 单位的牛奶。
不幸的是,他的挤奶机刚刚坏掉了。
他只有三个桶,容积分别为 X,Y,M(1≤X<Y<M)。
三个桶最初都是空的。
使用这三个桶,他可以执行以下两种类型的操作任意次数:
- 将最小的桶(容积为 X 的)装满牛奶,再将其中的牛奶全部倒入容积为 M 的桶中,前提是这不会导致容积为 M 的桶溢出牛奶。
- 将中号的桶(容积为 Y 的)装满牛奶,再将其中的牛奶全部倒入容积为 M 的桶中,前提是这不会导致容积为 M 的桶溢出牛奶。
虽然,约翰意识到他可能无法装满容积为 M 的桶,但请帮助他确定他可以添加到这个桶中的最大牛奶量。
输入格式
共一行,包含三个整数 X,Y,M。
输出格式
输出约翰可以添加到容积为 M 的桶中的最大牛奶量。
数据范围
1≤M≤1000,
1≤X<Y<M
输入样例:
17 25 77
输出样例:
76
样例解释
在此样例中,约翰可将容积为 17 的桶装满 3 次倒入大桶中,将容积为 25 的桶装满 1 次倒入大桶中,总共添加了 76 单位牛奶。
源代码
#include <iostream>
using namespace std;
int main()
{
int a,b,c;
cin>>a>>b>>c;
int num=c/a;//只需要对一个桶从最小数枚举到最大数即可,这里我枚举的是小桶
int ans=0;
for(int i = 0;i <= num;i ++ )
{
int t=(c-i*a)/b;//总体积减去此次枚举小桶的体积除以中桶的体积等于此次能够用中桶的最大桶数
int V=t*b+i*a;//中桶最大桶数加小桶此次枚举桶数等于此次枚举情况的最大体积
ans=max(ans,V);//ans当然要取最大啦
}
cout<<ans;
return 0;
}