C 有人能检查一下算法吗
此算法输入一个浮点值C 有人能检查一下算法吗,c,algorithm,C,Algorithm,此算法输入一个浮点值i,该值表示金额并返回支付该金额所需的最小硬币数,并返回一个整数c 值c1=25,c2=10,c3=5,c4=1 除了i=4.2它应该返回18个硬币,而不是返回22个硬币之外,我的代码在所有输入中都能正常工作 i=i*100; while (i>0) { if(i>=25) { c = (int) i/25; i= (int) i%25; } else if (i>=10 && i&l
i
,该值表示金额并返回支付该金额所需的最小硬币数,并返回一个整数c
值c1=25,c2=10,c3=5,c4=1
除了i=4.2
它应该返回18个硬币,而不是返回22个硬币之外,我的代码在所有输入中都能正常工作
i=i*100;
while (i>0) {
if(i>=25) {
c = (int) i/25;
i= (int) i%25;
}
else if (i>=10 && i<25) {
c = c + (int) i/10;
i=(int) i%10;
}
else if(i>=5 && i<10) {
c = c + (int) i/5;
i = (int) i%5;
}
else if(i<5) {
c = c + (int) i/1;
i = (int) i%1;
}
}
printf("%d\n",c);
i=i*100;
而(i>0){
如果(i>=25){
c=(int)i/25;
i=(int)i%25;
}
否则,如果(i>=10&&i=5&&i,则问题在于浮点精度
float i = 4.2;
i *= 100;
printf("%f\n", i);
打印:419.999969
而不是它应该的4.2
,在这种情况下419
是硬币问题中使用的值,导致使用22枚硬币16枚/25枚
,1枚/10枚
,1枚/5枚
和4枚/1枚
=总共22枚
使用:i=round(i*100);
代替i=i*100;
您需要考虑相等的值,例如:else if(i>=10&&i<25),范围为[ini,fin],开始时关闭,结束时打开。如果通过if
更改else if
,则不需要while循环
最终代码:
#include <stdio.h>
#include <math.h>
int main() {
int c = 0;
float iv = 4.2;
int i = round(iv * 100);
printf("%d\n", i);
if (i >= 25) {
c += i / 25;
i = i % 25;
}
if (i >= 10) {
c += i / 10;
i = i % 10;
}
if (i >= 5) {
c += i / 5;
i = i % 5;
}
if (i > 0) {
c += i;
}
printf("%d\n", c);
return 0;
}
#包括
#包括
int main(){
int c=0;
浮点数iv=4.2;
int i=圆形(iv*100);
printf(“%d\n”,i);
如果(i>=25){
c+=i/25;
i=i%25;
}
如果(i>=10){
c+=i/10;
i=i%10;
}
如果(i>=5){
c+=i/5;
i=i%5;
}
如果(i>0){
c+=i;
}
printf(“%d\n”,c);
返回0;
}
有关1.格式化代码使其可读。2.使用debuggerWow,居中?我认为GNU样式很难阅读。如果需要考虑相等的值,例如:elseif(I>=10&&I<25)
,范围是[ini,fin],开始时关闭,结束时打开。@NetVipeC是的,但回答仍然错误