如何在C中使用特定(不规则)步骤进行循环?
我用C为贪婪算法编写了以下函数(“change”和“numberCoins”是全局变量) 它很好用。然而,复制和粘贴让我感到不安。有没有可能不重复写那么多?我的想法是把它写在一个循环中。但是我不知道如何用不规则的步子做一个循环。我的想法是这样的(我如何做到,第一次分配给我25分,然后是15分,然后是10分,然后是1分) 谢谢你的帮助如何在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
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;
}