如何在C中使用特定(不规则)步骤进行循环?

如何在C中使用特定(不规则)步骤进行循环?,c,for-loop,C,For Loop,我用C为贪婪算法编写了以下函数(“change”和“numberCoins”是全局变量) 它很好用。然而,复制和粘贴让我感到不安。有没有可能不重复写那么多?我的想法是把它写在一个循环中。但是我不知道如何用不规则的步子做一个循环。我的想法是这样的(我如何做到,第一次分配给我25分,然后是15分,然后是10分,然后是1分) 谢谢你的帮助 int nominals[] = {100, 25, 10, 5, 1, 0}; void getNominals(double money, int *resu

我用C为贪婪算法编写了以下函数(“change”和“numberCoins”是全局变量)

它很好用。然而,复制和粘贴让我感到不安。有没有可能不重复写那么多?我的想法是把它写在一个循环中。但是我不知道如何用不规则的步子做一个循环。我的想法是这样的(我如何做到,第一次分配给我25分,然后是15分,然后是10分,然后是1分)

谢谢你的帮助

int nominals[] = {100, 25, 10, 5, 1, 0};

void getNominals(double money, int *result)
{
    unsigned ncents = money * 100.0;
    int *nm = nominals;
    while(*nm && ncents)
    {
        *result++ = ncents / *nm;
        ncents %= *nm++;
    }
}

int main(void)
{
    int result[sizeof(nominals) / sizeof(nominals[0])] = {0};

    getNominals(4.36, result);

    for(size_t index = 0; nominals[index]; index++)
    {
        printf("%d = %d\n", nominals[index], result[index]);
    }
}

多亏@WeatherVane的提示,我可以找到一个解决方案:

int calculateNumber(void)
{
    int coins[] = {25, 10, 5, 1};

    for (int i = 0; i < 4; i++)
    {
        numberCoins += change / coins[i];
        change = change % coins[i];
    }

    return 0;
}
int计算枚举(void)
{
整数硬币[]={25,10,5,1};
对于(int i=0;i<4;i++)
{
币数+=零钱/硬币[i];
更改=更改%硬币[i];
}
返回0;
}

Yes,您可以拥有一组硬币,例如
intcoin[4]={25,10,5,1}并迭代4次。谢谢@WeatherVane。我会回答这个问题。效果很好。
int nominals[] = {100, 25, 10, 5, 1, 0};

void getNominals(double money, int *result)
{
    unsigned ncents = money * 100.0;
    int *nm = nominals;
    while(*nm && ncents)
    {
        *result++ = ncents / *nm;
        ncents %= *nm++;
    }
}

int main(void)
{
    int result[sizeof(nominals) / sizeof(nominals[0])] = {0};

    getNominals(4.36, result);

    for(size_t index = 0; nominals[index]; index++)
    {
        printf("%d = %d\n", nominals[index], result[index]);
    }
}
int calculateNumber(void)
{
    int coins[] = {25, 10, 5, 1};

    for (int i = 0; i < 4; i++)
    {
        numberCoins += change / coins[i];
        change = change % coins[i];
    }

    return 0;
}