FireQ 发表于 2020-4-20 15:29:41

请问为什么我这个不能输出啊

题目假设一堆由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;
}

qiuyouzhi 发表于 2020-4-20 15:30:57

做浮点数运算有可能会有误差,你打印一下值试试

倒戈卸甲 发表于 2020-4-20 17:37:57

本帖最后由 倒戈卸甲 于 2020-4-20 17:55 编辑

内两层的for循环都不可省略初始条件,必须写为 for (b=0; b < x * 2; b++) 和for (c = 0; c < x * 10; c++)

倒戈卸甲 发表于 2020-4-20 18:06:08

至于原因,我拿两层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]
查看完整版本: 请问为什么我这个不能输出啊