打破我的钱

时间:2016-02-13 13:29:25

标签: c

有人可以帮我处理我的代码吗?我的程序显示输出错误,当我尝试输入数字2880时,它显示“输入无效”。数字2880可以被20整除吗?为什么会无效

int money, x[6],y[6],total;

x[0] = 1000; x[1] = 500; x[2] = 200; x[3] = 100; x[4] = 50; x[5] = 20;

system("cls");
printf("Enter your Money: ");
scanf("%d", &money);

total = money;

printf("\nBreakdown:\n");

for(int i=0;i < 6; i++){

    y[i] = ( money - (money % x[i]) )/x[i];
    money = (money % x[i]);

   if (y[i] != 0)
    printf("%10d  x  %d  =  %5d \n",x[i], y[i], (x[i] * y[i]));

}

printf("---------------------------\n");
printf("Total:                %d",total);

if(money>0){
   system("cls");
printf("Invalid Input !");

}
getch();

我希望我的输出会是这样的:

Enter your Money: 2880

Breakdown:
      1000  x  2  =   2000
       500  x  1  =    500
       200  x  1  =    200
       100  x  1  =    100
        20  x  4  =     80
---------------------------
Total:                2880

2 个答案:

答案 0 :(得分:1)

你可以在if循环中添加一个for子句,如果钱是20的倍数,则忽略除以50,如果这是你真正想要的。

否则,您的程序正在按照您的意愿完成。

int money () {
    int money, total;

    int x[6] = { 1000, 500, 200, 100, 50, 20 };
    int y[6] = { 0, 0, 0, 0, 0, 0 };

    printf("Enter your money: ");
    scanf("%d", &money);

    total = money;

    printf("\nBreakdown:\n");

    for(int i=0; i<6; i++) {
        if (x[i] == 50 && money % 20 == 0) {
            continue;
        }
        y[i] = (money - (money % x[i]))/x[i];
        money = (money % x[i]);
    }

    if (money > 0 && y[3] > 0) {
        money += 50;
        if (money % 20 == 0) {
            y[5] = money / 20;
            y[3] = y[3] - 1;
            y[4] = y[4] + 1;
            money = 0;
        }
    }

    for(int i=0; i<6; i++) {
       if (y[i] != 0) {
           printf("\t  %4d  x%5d  =  %5d \n", x[i], y[i], (x[i] * y[i]));
       }
    }

    printf("\t---------------------------\n");
    printf("\t  Total:           %5d\n\n", total);

    if(money > 0) {
        printf("Invalid input!");
    }
}

编辑:我为if之类的总和添加了一个$2810子句,其剩余部分为10美元(如果以标准方式分解),因此可能会有所不同分解。我们的想法是检查是否加上50美元,其余部分可以很好地分成20美元。这50美元来自分解现有的100美元。

<强> E.g。 210美元首先分解为:100美元x 2,剩余10美元,因此无效

所以,相反,我们将100美元改为2 x 50美元,以便我们获得

$ 100 x 1,$ 50 x 1,余下$ 10

我们将50美元与剩余的10美元相加,得到60美元,分为20美元x 3

因此,我们得到210美元= 1 x 100美元,1 x 50美元,3 x 20美元。

答案 1 :(得分:0)

好吧,当我编译这个程序时,它成功运行,只是在显示故障之后,它显示无效输入。当输入的金额小于0时,我认为你想打印无效输入,因为当金额大于0时打印无效输入没有意义。我想你应该改变

if(money>0){

if(money<0){

另外,你的分解是错误的,因为它落后10,总和只增加到2870而不是2880。

编辑:您刚刚在评论中提到,如果有剩余部分,则会打印无效输入。下次请在问题中提及,就像混淆问题的回答者一样,就像我感到困惑一样。我会找回解决方案,但我不会删除原来的答案。