首页 > 解决方案 > 如何将此函数转换为更好的循环?

问题描述

所以我的问题是在CS50 哈佛课程第 1 周的问题集 1中。任务是编写一个程序,计算获得零钱时可能的最小硬币数量。我已经编写了程序并且它可以工作,但是我想知道是否有人可以告诉我如何进一步改进我的计算硬币数量的函数。它基本上是复制和粘贴 4 次相同的代码行,只是更改其中的硬币值(25、10、5、1)。谁能帮我把它转换成某种循环,因为虽然复制和粘贴可以工作,但看起来对我来说有点糟糕。

int calculate_coins(int change)
{
    //Count coins from 0
    int n = 0;

    //How much 25s can be used? 
    n += change / 25;
    //Calculate remaining change
    change %= 25;

    n += change / 10;
    change %= 10;

    n += change / 5;
    change %= 5;

    n += change / 1;
    change %= 1;

    return n;
}

标签: cfunctionloopscs50

解决方案


如果我想在其他任何地方使用它,我会将数组设为全局。除此之外我同意。

int value[] = { 25, 10, 5, 1 }; //global array

int calculate_coins(int change)
{
    for (int i = 0; i < 4; i++) 
    {
        n += change / value[i];
        change %= value[i];
    }

    return n;
}

推荐阅读