gpt4 book ai didi

c - 具有多个语句和条件的单个循环是否比几个简单的循环更好?

转载 作者:太空狗 更新时间:2023-10-29 15:05:25 27 4
gpt4 key购买 nike

我正在创建一个非常简单的程序,它使用贪婪算法确定将零钱返还给客户需要多少硬币。该算法非常明显,您只需确定可以使用的较大硬币,从零钱中减去它的值(value)并更新硬币计数器。

我想到了两个非常相似的实现。

注意:changeInt是变化,乘以100,转化为整数。

1) 单个“复杂”循环

while(changeInt != 0) {
if(changeInt - 25 >= 0){
changeInt -= 25;
coins++;
}
else if(changeInt - 10 >= 0){
changeInt -= 10;
coins++;
}
else if(changeInt - 5 >= 0){
changeInt -= 5;
coins++;
}
else if(changeInt - 1 >= 0){
changeInt -= 1;
coins++;
}

}

2) 多个简单循环

    while(changeInt - 25 >= 0) 
{
changeInt -= 25;
coins++;
}
while(changeInt - 10 >= 0)
{
changeInt -= 10;
coins++;
}

while(changeInt - 5 >= 0)
{
changeInt -= 5;
coins++;
}

while(changeInt - 1 >= 0)
{
changeInt -= 1;
coins++;
}

现在,我知道这两种情况下的性能可能相似,因为算法相同,但我想知道哪种方法更好。

单循环是我想到的第一个想法,然后我想到了第二种方法,直觉上我觉得它更好。

我不太关心我的具体场景,我更感兴趣的是一般场景(几个简单的循环与几个更复杂的循环)

1) 哪种方法在性能方面更好?

2) 区别是否明显,至少在处理大量数据时是这样?

3) 一种方法是否比另一种方法明显更具可读性? (不确定我是否可以在这里问)

谢谢!

最佳答案

正如其他人所提到的,第二种方法更可取,因为它使用较少的比较。

更简洁、更简洁的方法是使用除法和模数:

int current = changeInt;
coins += current / 25;
current %= 25;
coins += current / 10;
current %= 10;
coins += current / 5;
current %= 5;
coins += current;

虽然 div 和 mod 运算符比减法更昂贵,但对于较大的 changeInt 值并且没有分支,它可能更快。

关于c - 具有多个语句和条件的单个循环是否比几个简单的循环更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38904742/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com