C 贪婪算法编译时不会出错,但在运行时不会通过第一个操作
所以我在用cs50,我在做贪婪算法现金问题,我写的代码编译得很好,但当我运行它时,它会要求以美元为单位的更改金额:然后永远不会接受有效的响应,我永远无法输入输入,什么也没有发生 一位朋友说我丢失了一个输入,这就是为什么它不工作的原因,但我正在尝试使用用户的输入,所以。。。非常感谢您的帮助,因为我想我真的很接近,我只是不知道如何修复它,help50说技术上没有问题,所以我只是处于停滞状态 谢谢大家!C 贪婪算法编译时不会出错,但在运行时不会通过第一个操作,c,cs50,greedy,C,Cs50,Greedy,所以我在用cs50,我在做贪婪算法现金问题,我写的代码编译得很好,但当我运行它时,它会要求以美元为单位的更改金额:然后永远不会接受有效的响应,我永远无法输入输入,什么也没有发生 一位朋友说我丢失了一个输入,这就是为什么它不工作的原因,但我正在尝试使用用户的输入,所以。。。非常感谢您的帮助,因为我想我真的很接近,我只是不知道如何修复它,help50说技术上没有问题,所以我只是处于停滞状态 谢谢大家! #include <cs50.h> #include <stdio.h>
#include <cs50.h>
#include <stdio.h>
#include <math.h>
int main(void)
{
// identifying variables
float amount;
int cents;
int count = 0;
// prompting user for input
do
{
amount = get_float("Change amount in USD: ");
}
// ensuring a positive number
while (amount < 0);
//changing float to an int
cents = round(amount*100);
// using highest denomination first (quarters)
while (cents % 25 >= 0)
{
count++;
cents = cents % 25;
}
// using next highest denomination second (dimes)
while (cents % 10 >= 0)
{
count++;
cents = cents % 10;
}
// using next highest denomination third (nickels)
while (cents % 5 >= 0)
{
count++;
cents = cents % 5;
}
// using last denomination amount (pennies)
while (cents % 1 >= 0)
{
count++;
cents = cents % 1;
}
// displays number of coins used
printf("%i\n", count);
}由于逻辑错误,您的系统陷入无限循环。查看while循环,例如: 而美分%25>=0 { 计数++; 美分=美分%25; } 模块操作将为您提供一个介于0和24之间的数字。无论原始值是多少,条件始终为真 您想将您的条件更新为其他条件。请注意,在您的while中,您应该以不同的方式更新美分,因为在第一次迭代之后,美分值不会改变:假设它是10。它进入while循环,然后美分=美分%25将保持10。静止无限循环
while (cents % 25 >= 0)
{
count++;
cents = cents % 25;
}
除法总是>=0,因此有一个无限循环,切换到
while (cents % 25 > 0)
问题在于这段代码以及类似的代码 //第一季度使用最高面额 而美分%25>=0 { 计数++; 美分=美分%25; } 这将导致基于任意整数值%25始终大于等于0的原则的无限循环。然而,这个问题实际上根本不需要mod操作。相反,检查减去硬币的值是否大于等于0,如果大于等于0,则执行减法 //第一季度使用最高面额 而美分-25>=0 { 计数++; 美分=美分-25美分; }
您使用什么输入来测试程序?我被指示使用随机的正值和负值,以确保负面响应导致重新询问,并且各种正数产生正确数量的硬币。这种更改是不够的,因为在循环中,他只接受变量的模件谢谢!我不能说我完全理解你在说什么,但我想我基本上理解你在说什么。这跟订单有关系吗?25美分比25美分更可行还是更不可行?我又看了一遍我的笔记,想这可能与此有关。你的代码打算做什么?在四分之一的时候给同样多的零钱,然后是10秒,以此类推?请尽量少用硬币换零钱我很抱歉,我更喜欢用单词而不是数字。有一个原则,任何整数值%25将始终>=0?为什么会这样?当然!%或模数运算符返回两个数字相除的余数。余数是将两个整数除后剩下的数。如果数字完全分开,余数是0,因为没有剩余。因此,0是最小余数,因为剩余的负数没有任何意义。另外,最大值是右边的数字减去一,因为如果再加一,数字将再次等分,这意味着余数是0。因此,任何数字%任何数字都大于或等于0,而不仅仅是25。