当前位置: 代码迷 >> C语言 >> 我的问题出在哪了?凑一块钱的题
  详细解决方案

我的问题出在哪了?凑一块钱的题

热度:196   发布时间:2007-07-19 16:36:19.0
我的问题出在哪了?凑一块钱的题

问题出在哪了?
#include <stdio.h>
void main()
{
int f1,f2,f5,m1,m2,m5,a=1;
printf("凑成一块钱的方法有:\n");

for(f1=0;f1<=100;f1++)
for(f2=0;f2<=50;f2++)
for(f5=0;f5<=20;f5++)
for(m1=0;m1<=10;m1++)
for(m2=0;m2<=5;m2++)
for(m5=0;m5<=2;m2++)
{
if(0.01*f1+0.02*f2+0.05*f5+0.1*m1+0.2*m2+0.5*m5==1)
printf("5毛=%d 2毛=%d 1毛=%d 5分=%d 2分=%d 1分=%d",m5,m2,m1,f5,f2,f1);
}
}

搜索更多相关的解决方案: include  

----------------解决方案--------------------------------------------------------
if(1*f1+2*f2+5*f5+10*m1+20*m2+50*m5==100)
----------------解决方案--------------------------------------------------------

#include <stdio.h>
int main(void)
{
int f1,f2,f5,m1,m2,m5,a=1;
printf("凑成一块钱的方法有:\n");

for(f1=0;f1<=100;f1++)
for(f2=0;f2<=50;f2++)
for(f5=0;f5<=20;f5++)
for(m1=0;m1<=10;m1++)
for(m2=0;m2<=5;m2++)
for(m5=0;m5<=2;m5++) /*错误1,已修改*/
{
if((0.01*f1+0.02*f2+0.05*f5+0.1*m1+0.2*m2+0.5*m5)<=1.001 && (0.01*f1+0.02*f2+0.05*f5+0.1*m1+0.2*m2+0.5*m5)>=0.999) /*错误2,已修改*/
printf("5毛=%d 2毛=%d 1毛=%d 5分=%d 2分=%d 1分=%d\n",m5,m2,m1,f5,f2,f1);
}
getch();
return 0;
}


----------------解决方案--------------------------------------------------------
谢谢

----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

坚持到底
2007-07-19 12:17:32
水漪儿

来 自:shangshida
等 级:论坛游民
帖 子:147
专家分:10
注 册:2007-7-19
  得分:0 

孔明
可以请教你吗?
if((0.01*f1+0.02*f2+0.05*f5+0.1*m1+0.2*m2+0.5*m5)<=1.001 &&(0.01*f1+0.02*f2+0.05*f5+0.1*m1+0.2*m2+0.5*m5)>=0.999) (0.01*f1+0.02*f2+0.05*f5+0.1*m1+0.2*m2+0.5*m5)>=0.999)也要加上?


----------------解决方案--------------------------------------------------------
以下是引用水漪儿在2007-7-20 10:14:08的发言:

孔明
可以请教你吗?
if((0.01*f1+0.02*f2+0.05*f5+0.1*m1+0.2*m2+0.5*m5)<=1.001 &&(0.01*f1+0.02*f2+0.05*f5+0.1*m1+0.2*m2+0.5*m5)>=0.999) (0.01*f1+0.02*f2+0.05*f5+0.1*m1+0.2*m2+0.5*m5)>=0.999)也要加上?

是,因为<=1.001的数有无数个,0.9,0.5等都不是所要的,需要的就是约等于1的(因为小数的有精度限制,所以必须加上>0.999 <1.001)


----------------解决方案--------------------------------------------------------
孔明
谢谢你!
但我想问小数的精度限制在C上就是3位有效数字还是一般取3位有效数字?
----------------解决方案--------------------------------------------------------
以下是引用水漪儿在2007-7-20 17:49:48的发言:
孔明
谢谢你!
但我想问小数的精度限制在C上就是3位有效数字还是一般取3位有效数字?

其实,小数的精度还是很高的

float a=1.0
(a==1)却是时常结果为非(0)
float的精度一般为5-6位,double能有十多位

具体可以看:http://doc.greatso.com/20070520/3307/

[此贴子已经被作者于2007-7-21 9:43:06编辑过]


----------------解决方案--------------------------------------------------------
老师讲过了,我怎么给忘了。
孔明,谢谢了!
float的精度一般为6-7位,double有15-16位。
如果被我们老师知道问这种问题,
原本就半圈的头发又要少一半了!
----------------解决方案--------------------------------------------------------
  相关解决方案