“atm”模拟器

泽托

我正在尝试解决这个问题,我需要模拟一种 atm 提现。该程序将询问 3 种类型的美元钞票并将其存储在 3 个不同的隔间中,例如隔间 1 = 20;托架 2 = 50;托架 3 = 100;在程序要求提现金额后,如果可用,最多提供 3 个选项。

For example: cash out amount: U$ 220

A) 2 x U$ 100 + 1 x U$ 20
B) 1 x U$ 100 + 2 x U$ 50 + 1 x U$ 20
C) 4 x U$ 50 + 1 x U$ 20

我正在努力寻找解决 B 和 C 选项的方法,我不知道我是否以我“解决”A 选项的方式进行了隧道展望,因为我觉得必须有一种更简单的计算方法

a、b 和 c 变量是海湾值的冒泡排序

 if(cash_out >= a){
      left = total % a; //total = cash_out;
      if(left == 0){
          cont_A = total / a;
      } else {
          cont_A = total / a;
          total = left;
          if(total >= b){
              left = total % b;
              cont_B = total / b;
              total = left;
              if(total != 0){
                  cont_C = total / c;
              }
          } else {
              cont_C = total / c;
          }
      }
 } else if(cash_out >= b){
      left = total % b;
      if(left == 0){
          cont_B = total / b;
          left = total % b;
          if(left == 0){
              cont_C = total / c;
          }
      } else {
          cont_B = total / b;           
          total = left;
          if(total >= c){
              cont_C = total / c;
          }
      }
 } else {
       cont_C = total / c;
 }

为了清楚起见,我不是在问,所以有人会为我解决整个问题,我只是想了解我应该如何解决这个问题

代码是我为 A 选项所做的

4386427

由于您的问题涉及相当小的数字,您可以从蛮力方法开始,即简单地尝试可能范围内的所有组合。

喜欢

#include <stdio.h>

int main(void) {
    int bay[3] = {100, 50, 20};
    int cash_out = 220;

    for (int x = cash_out/bay[0]; x >= 0; --x)
    {
        for (int y = cash_out/bay[1]; y >= 0; --y)
        {
            for (int z = cash_out/bay[2]; z >= 0; --z)
            {
                if (cash_out == (x * bay[0] + y*bay[1] + z*bay[2]))
                {
                    printf("%d %d %d\n", x, y, z);
                }
            }
        }
    }
    return 0;
}

这将打印:

2 0 1
1 2 1
1 0 6
0 4 1
0 2 6
0 0 11

当然,像上面这样的蛮力方法不是最佳的。因此,您的下一步是优化代码。

第一步是摆脱最内部的 for 循环,因为它完全没有必要。我将把它留给你作为练习(提示:z可以直接计算)。

第二步是通过考虑第一个循环“使用”的数量来限制第二个 for 循环的范围。再一次,我将把它留给你作为练习。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章