You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CS50 Cash作业代码理解与实现疑问:贪心算法找零功能

CS50 Cash作业问题解答

你的思路正确性

你的思路完全正确。美国流通的硬币面值(25¢、10¢、5¢、1¢)刚好符合贪心算法的最优性要求——每次优先使用当前最大面值的硬币,最终得到的总硬币数量就是最少的。

关于return操作的解释

return是函数的“输出端口”:当函数执行到return语句时,会立刻终止函数运行,并把return后面的数值传递给调用这个函数的地方。比如主函数里写int cents = get_cents();,就是让get_cents()执行完后,把用户输入的美分数值返回给cents变量;calculate_quarters(cents)则会返回当前美分能换的quarter数量,赋值给quarters变量。

补全所有未实现的函数

以下是符合作业要求的函数实现(适配CS50的C语言代码框架):

1. get_cents()函数

负责获取用户输入的合法非负整数(不能是负数):

#include <stdio.h>
#include <cs50.h> // CS50库提供的get_int()函数

int get_cents(void)
{
    int cents;
    do
    {
        cents = get_int("Cents owed: ");
    }
    while (cents < 0); // 循环直到输入合法值
    return cents;
}

2. calculate_quarters()函数

计算当前美分能兑换的最大quarter(25¢)数量:

int calculate_quarters(int cents)
{
    return cents / 25; // 整数除法自动取整,比如30/25=1
}

3. calculate_dimes()函数

计算剩余美分能兑换的最大dime(10¢)数量:

int calculate_dimes(int cents)
{
    return cents / 10;
}

4. calculate_nickels()函数

计算剩余美分能兑换的最大nickel(5¢)数量:

int calculate_nickels(int cents)
{
    return cents / 5;
}

5. calculate_pennies()函数

计算最后剩余的美分对应的penny(1¢)数量:

int calculate_pennies(int cents)
{
    return cents; // 1¢硬币数量等于剩余美分数
}

主函数的执行逻辑(对应你的思路)

主函数会按顺序调用上述函数,逐步减少剩余美分并累加硬币总数:

int main(void)
{
    // 获取用户输入的美分
    int cents = get_cents();

    // 计算各面值硬币数量,同时更新剩余美分
    int quarters = calculate_quarters(cents);
    cents = cents - quarters * 25;

    int dimes = calculate_dimes(cents);
    cents = cents - dimes * 10;

    int nickels = calculate_nickels(cents);
    cents = cents - nickels * 5;

    int pennies = calculate_pennies(cents);

    // 输出总硬币数
    printf("%i\n", quarters + dimes + nickels + pennies);
}

内容的提问来源于stack exchange,提问作者Meliodas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:05:19