请问为什么我这个不能输出啊
题目假设一堆由1元、5角、1角组成的硬币总面值为0.5元~3元中任意钱数(钱数为带有1位小数的浮点数,如:2.5),输出所有的硬币组合(组合中的硬币数量可以为0),组合的输出格式:(2, 1, 1) 表示2枚1元,1枚5角,1枚1角的硬币组合,(1,0,1) 表示1枚1元,0枚5角,1枚1角的硬币组合。输出格式:"(%d,%d,%d)\n"
我的代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
double x;
scanf("%lf",&x);
int a=0,b=0,c=0;
for(;a<x;a++){
for(;b<x*2;b++){
for(;c<x*10;c++){
if(a+b*0.5+c*0.1==x)
printf("(%d,%d,%d)\n",a,b,c);
}
}
}
return 0;
}
做浮点数运算有可能会有误差,你打印一下值试试 本帖最后由 倒戈卸甲 于 2020-4-20 17:55 编辑
内两层的for循环都不可省略初始条件,必须写为 for (b=0; b < x * 2; b++) 和for (c = 0; c < x * 10; c++) 至于原因,我拿两层for循环说明for (; b < x * 2; b++) {
for (; c < x * 10; c++) {
if (b * 0.5 + c * 0.1 == x)
printf("(%d,%d)\n", b, c);
}
}
比如这个代码,你输入x=1.5。那么b=0时,内层循环会将c从0一直遍历到14,无任何输出。然后开始b=1的情形,但因为你没有初始化语句,此时c=14,且往后c永远只能等于14,无任何输出马上开始b=2,又无任何输出,程序结束。
页:
[1]