将薪水分成最小数量的美国账单

时间:2019-02-22 16:42:43

标签: c

我需要解决以下问题:

编写一个程序,要求用户输入美元金额,并显示如何使用最少的20美元,10美元,5美元和1美元的钞票付款。

我不知道如何将第一个分割票据的找零金额提取为20,然后再提取10、5和1。

我编写了以下代码,但没有解决我的问题:

#include <stdio.h>

int main(void)
{
    int value1, value2, value3, value4, bill, change;
    printf("Put the bill value: ");
    scanf_s("%d", &bill);

    value1 = bill/ 20;
    rest = bill- (bill/ 20);
    value2 = bill /10 //  Tried with this but not  working:(bill-(bill/20))/10;
    value3 = bill/ 5;
    value4 = bill/ 1;

    printf("The amount is: %d$. \n", bill);

    printf("change=%d", change);
    /*printf(" $20 Bill:  \n", value1);
    printf("$10 Bill:  \n", value2);
    printf("$5 Bill: \n", value3);
    printf("$1 Bill:  \n", value4);*/

    return 0; 
}

如果您能向我解释如何正确解决此问题,将会对我有很大帮助。

2 个答案:

答案 0 :(得分:0)

您在计算rest值时遇到问题。因此,请使用以下解决方案:

rest  = bill;
value1 = rest / 20;
rest = rest % 20;
value2 = rest /10 ;
rest = rest % 10;
value3 = rest / 5;
rest = rest % 5;
value4 = rest / 1;

答案 1 :(得分:0)

类似的东西

#include <stdio.h>

int main()
{
  int v;

  if ((scanf("%d", &v) == 1) && (v > 0)) {
    int bills[] = { 20, 10, 5, 1 };
    size_t i;

    for (i = 0; i != sizeof(bills) / sizeof(int); ++i) {
      int n = v/bills[i];

      if (n != 0) {
        printf("%d*%d$ ", n, bills[i]);
        v %= bills[i];
      }
    }

    putchar('\n');
  }
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -Wextra r.c
pi@raspberrypi:/tmp $ ./a.out
123
6*20$ 3*1$ 
pi@raspberrypi:/tmp $ ./a.out
1234
61*20$ 1*10$ 4*1$