我为cs50的贪婪算法编写了一个代码。它适用于0和1之间的输入。如何使其适用于4.2,6.5,8等输入?我在下面列出了我的代码。我应该在程序中修改什么?
#include<stdio.h>
#include<cs50.h>
#include<math.h>
int main()
{
int count , change;
float cents;
printf("Enter the change amount : ");
cents = GetFloat();
cents = cents * 100;
change = round(cents);
count = 0;
while(cents < 0 )
{
printf("Enter a positive number : ");
cents = GetFloat();
}
while (change >= 25)
{
change = change - 25;
count++;
}
while (change < 25 & change >= 10)
{
change = change - 10;
count++;
}
while (change < 10 & change >= 5)
{
change = change - 5;
count++;
}
while (change < 5 & change >= 1)
{
change = change - 1;
count++;
}
printf("Total number of coins used : " );
printf (" %d " , count );
printf("\n");
}
答案 0 :(得分:0)
我相信你的问题是你正在使用按位逻辑运算符。您应该在比较中使用&&
来比较两个表达式的值。还有其他一些小问题:保证正输入的循环应该将cents
乘以100和round()
,然后再分配这个新值。但是,您实际上并不需要change
和cents
。而且你不需要像你所写的那么多的比较,如果没有额外的比较,你就不需要首先给你带来麻烦的逻辑运算符!
我注意到像4.20
之类的数字首先被舍入,然后乘以100!当然这是错误的,为4.20
,4.75
和4
提供了相同的结果。我相应地更改了下面的代码,但是您的原始代码正确地执行了此部分(除了在输入验证循环中,如前所述)。现在程序正确处理了这些输入。
这是一个已清理的版本(我没有cs50.h
库,因此存在一些小差异):
#include <stdio.h>
#include <math.h>
int main(void)
{
int count;
float cents;
printf("Enter the change amount: ");
scanf("%f", ¢s);
cents = (float)round(cents * 100);
count = 0;
while (cents < 0) {
printf("Enter a positive number: ");
cents = (float)round(cents * 100);
}
while (cents >= 25) {
cents -= 25;
count++;
}
while (cents >= 10) {
cents -= 10;
count++;
}
while (cents >= 5) {
cents -= 5;
count++;
}
while (cents >= 1) {
cents -= 1;
count++;
}
printf("Total number of coins used: %d\n", count);
return 0;
}