有人可以帮我处理我的代码吗?我的程序显示输出错误,当我尝试输入数字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
答案 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。
编辑:您刚刚在评论中提到,如果有剩余部分,则会打印无效输入。下次请在问题中提及,就像混淆问题的回答者一样,就像我感到困惑一样。我会找回解决方案,但我不会删除原来的答案。