Advertisement
Infernale

NCTU LAB 04/12 Num 3

Dec 4th, 2018
427
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.69 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int gcd(int a, int b){
  5.     if(a==0){
  6.         return b;
  7.     }
  8.     return gcd(b%a, a);
  9. }
  10.  
  11. int max(int a, int b, int c, int d){
  12.     if(a>=b && a>=c && a>=d){
  13.         return a;
  14.     }
  15.     if(b>=a && b>=c && b>=d){
  16.         return b;
  17.     }
  18.     if(c>=a && c>=b && c>=d){
  19.         return c;
  20.     }
  21.     return d;
  22. }
  23.  
  24. int min(int a, int b, int c, int d){
  25.     if(a<=b && a<=c && a<=d){
  26.         return a;
  27.     }
  28.     if(b<=a && b<=c && b<=d){
  29.         return b;
  30.     }
  31.     if(c<=a && c<=a && c<=d){
  32.         return c;
  33.     }
  34.     return d;
  35. }
  36.  
  37.  
  38. void show(int espresso, int milk, int chocolate, int froth){
  39.     printf("Espresso: %d\n", espresso);
  40.     printf("Milk: %d\n", milk);
  41.     printf("Chocolate: %d\n", chocolate);
  42.     printf("Froth: %d\n", froth);
  43. }
  44.  
  45. void add(int *espresso, int *milk, int *chocolate, int *froth, int supply_espresso, int supply_milk, int supply_chocolate, int supply_froth){
  46.     *espresso+=supply_espresso;
  47.     *milk+=supply_milk;
  48.     *chocolate+=supply_chocolate;
  49.     *froth+=supply_froth;
  50. }
  51.  
  52. bool make(int *espresso, int *milk, int *chocolate, int *froth, int r0 ,int r1 ,int r2 ,int r3 ,int *output){
  53.     int hcm = gcd(r0,gcd(r1,gcd(r2,r3)));
  54.     r0 = (r0==0?r0:r0/hcm);
  55.     r1 = (r1==0?r1:r1/hcm);
  56.     r2 = (r2==0?r2:r2/hcm);
  57.     r3 = (r3==0?r3:r3/hcm);
  58.     int maxR = max(r0, r1, r2, r3);
  59.     int a,b,c,d;
  60.     a = (*espresso/maxR==0?9999:*espresso/maxR);
  61.     b = (*milk/maxR==0?9999:*milk/maxR);
  62.     c = (*chocolate/maxR==0?9999:*chocolate/maxR);
  63.     d = (*froth/maxR==0?9999:*froth/maxR);
  64.     int minI = min(a,b,c,d);
  65.     if(*espresso-minI*r0<0 || *milk-minI*r1<0 || *chocolate-minI*r2<0 || *froth-minI*r3<0){
  66.         return false;
  67.     }
  68.     int dif = minI*r0 + minI*r1 + minI*r2 + minI*r3;
  69.     *espresso-=minI*r0;
  70.     *milk-=minI*r1;
  71.     *chocolate-=minI*r2;
  72.     *froth-=minI*r3;
  73.     *output = dif;
  74.     return true;
  75. }
  76.  
  77. int main(){
  78.     int espresso=0, milk=0, chocolate=0, froth=0, option, opt, out;
  79.     int re, rm, rc, rf;
  80.     int addE, addM, addC, addF;
  81.     char cnt = 'y';
  82.     do{
  83.         system("cls");
  84.         show(espresso, milk, chocolate, froth);
  85.         printf("1. Add ingredient\n");
  86.         printf("2. Make coffee\n");
  87.         printf("Choose option: ");
  88.         scanf("%d", &option);
  89.         switch(option){
  90.             case 1:
  91.                 printf("Input increased volume(in order of espresso, milk, chocolate, froth)\n");
  92.                 scanf("%d %d %d %d", &addE, &addM, &addC, &addF);
  93.                 add(&espresso, &milk, &chocolate, &froth, addE, addM, addC, addF);
  94.                 break;
  95.             case 2:
  96.                 printf("1. Latte\n");
  97.                 printf("2. Cappuccino\n");
  98.                 printf("3. Mocha\n");
  99.                 printf("4. User define\n");
  100.                 scanf("%d", &opt);
  101.                 switch(opt){
  102.                     case 1:
  103.                         if(make(&espresso, &milk, &chocolate, &froth, 3, 3, 0, 4, &out)){
  104.                             printf("Congratulations! you make %d ml Latte\n", out);
  105.                         }else{
  106.                             printf("Ingredients are not enough\n");
  107.                         }
  108.                         break;
  109.                     case 2:
  110.                         if(make(&espresso, &milk, &chocolate, &froth, 7, 3, 0, 5, &out)){
  111.                             printf("Congratulations! you make %d ml Cappuccino\n", out);
  112.                         }else{
  113.                             printf("Ingredients are not enough\n");
  114.                         }
  115.                         break;
  116.                     case 3:
  117.                         if(make(&espresso, &milk, &chocolate, &froth, 3, 1, 1, 0, &out)){
  118.                             printf("Congratulations! you make %d ml Mocha\n", out);
  119.                         }else{
  120.                             printf("Ingredients are not enough\n");
  121.                         }
  122.                         break;
  123.                     case 4:
  124.                         printf("Input ratio<in order of espresso, milk, chocolate, froth\n");
  125.                         scanf("%d %d %d %d", &re, &rm, &rc, &rf);
  126.                         if(make(&espresso, &milk, &chocolate, &froth, re, rm, rc, rf, &out)){
  127.                             printf("Congratulations! you make %d ml defined coffee\n", out);
  128.                         }else{
  129.                             printf("Ingredients are not enough\n");
  130.                         }
  131.                         break;
  132.                 }      
  133.                 break;
  134.         }
  135.         printf("Continue?(y/n): ");
  136.         scanf(" %c", &cnt);
  137.     }while(cnt!='n');
  138.     printf("Thank you for using coffee maker!");
  139.     return 0;
  140. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement