C语言 百钱买百鸡 问题

来源:百度知道 编辑:UC知道 时间:2024/06/07 13:02:32
main()
{int a,b,c;
for(a=0;a<=19;a++)
{ for(b=0;b<=33;b++)
{ c=100-a-b;
if(a*5+b*3+c/3==100)
printf("%d %d %d\n",a,b,c);
}
}
}
运算结果是
0 25 75
3 20 77
4 18 78
7 13 80
8 11 81
11 6 83
12 4 84
其中
只有4组解是对的
分别是
0 25 75
4 18 78
8 11 81
12 4 84
加一个c%3==0可以解决问题 但是
c/3本来就一定得是一个整数 系统计算的时候怎么会得到c=77 这样的解呢?

因为c本身就是一个int

a = (int)3*5= (int) 15 = 15
b = (int)20 * 3 = (int) 60 = 60
c = (int)77/3 = (int)25.666 = 25

Type casting是常识,把一个小数直接cast到int的时候,小数点后的数字直接去掉,例如

(int) 77/3 = (int)25.666 =25
(int) 76/3 = (int)25.333 =25
(int) 75/3 = (int)25.0 = 25

c是int,则c/3就是它的商,所以只要5a+3b+商是一百就满足现有条件了