鱼C论坛

 找回密码
 立即注册
查看: 659|回复: 3

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

[复制链接]
发表于 2020-4-20 15:29:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目  假设一堆由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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-20 15:30:57 | 显示全部楼层
做浮点数运算有可能会有误差,你打印一下值试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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++)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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,又无任何输出,程序结束。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 06:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表