#include
#include
int gcd(int a, int b){
if(a==0){
return b;
}
return gcd(b%a, a);
}
int max(int a, int b, int c, int d){
if(a>=b && a>=c && a>=d){
return a;
}
if(b>=a && b>=c && b>=d){
return b;
}
if(c>=a && c>=b && c>=d){
return c;
}
return d;
}
int min(int a, int b, int c, int d){
if(a<=b && a<=c && a<=d){
return a;
}
if(b<=a && b<=c && b<=d){
return b;
}
if(c<=a && c<=a && c<=d){
return c;
}
return d;
}
void show(int espresso, int milk, int chocolate, int froth){
printf("Espresso: %d\n", espresso);
printf("Milk: %d\n", milk);
printf("Chocolate: %d\n", chocolate);
printf("Froth: %d\n", froth);
}
void add(int *espresso, int *milk, int *chocolate, int *froth, int supply_espresso, int supply_milk, int supply_chocolate, int supply_froth){
*espresso+=supply_espresso;
*milk+=supply_milk;
*chocolate+=supply_chocolate;
*froth+=supply_froth;
}
bool make(int *espresso, int *milk, int *chocolate, int *froth, int r0 ,int r1 ,int r2 ,int r3 ,int *output){
int hcm = gcd(r0,gcd(r1,gcd(r2,r3)));
r0 = (r0==0?r0:r0/hcm);
r1 = (r1==0?r1:r1/hcm);
r2 = (r2==0?r2:r2/hcm);
r3 = (r3==0?r3:r3/hcm);
int maxR = max(r0, r1, r2, r3);
int a,b,c,d;
a = (*espresso/maxR==0?9999:*espresso/maxR);
b = (*milk/maxR==0?9999:*milk/maxR);
c = (*chocolate/maxR==0?9999:*chocolate/maxR);
d = (*froth/maxR==0?9999:*froth/maxR);
int minI = min(a,b,c,d);
if(*espresso-minI*r0<0 || *milk-minI*r1<0 || *chocolate-minI*r2<0 || *froth-minI*r3<0){
return false;
}
int dif = minI*r0 + minI*r1 + minI*r2 + minI*r3;
*espresso-=minI*r0;
*milk-=minI*r1;
*chocolate-=minI*r2;
*froth-=minI*r3;
*output = dif;
return true;
}
int main(){
int espresso=0, milk=0, chocolate=0, froth=0, option, opt, out;
int re, rm, rc, rf;
int addE, addM, addC, addF;
char cnt = 'y';
do{
system("cls");
show(espresso, milk, chocolate, froth);
printf("1. Add ingredient\n");
printf("2. Make coffee\n");
printf("Choose option: ");
scanf("%d", &option);
switch(option){
case 1:
printf("Input increased volume(in order of espresso, milk, chocolate, froth)\n");
scanf("%d %d %d %d", &addE, &addM, &addC, &addF);
add(&espresso, &milk, &chocolate, &froth, addE, addM, addC, addF);
break;
case 2:
printf("1. Latte\n");
printf("2. Cappuccino\n");
printf("3. Mocha\n");
printf("4. User define\n");
scanf("%d", &opt);
switch(opt){
case 1:
if(make(&espresso, &milk, &chocolate, &froth, 3, 3, 0, 4, &out)){
printf("Congratulations! you make %d ml Latte\n", out);
}else{
printf("Ingredients are not enough\n");
}
break;
case 2:
if(make(&espresso, &milk, &chocolate, &froth, 7, 3, 0, 5, &out)){
printf("Congratulations! you make %d ml Cappuccino\n", out);
}else{
printf("Ingredients are not enough\n");
}
break;
case 3:
if(make(&espresso, &milk, &chocolate, &froth, 3, 1, 1, 0, &out)){
printf("Congratulations! you make %d ml Mocha\n", out);
}else{
printf("Ingredients are not enough\n");
}
break;
case 4:
printf("Input ratio