今天随手拿到一本书,看到一些趣味的问题,第一个便是百鸡百钱问题:一只公鸡五钱,一只母鸡三钱,三只小鸡一钱。现用百钱买百鸡,请问公鸡,母鸡,小鸡各多少只?
看到这个问题,第一个想到的就是穷举循环法,即用三个循环来写遍历三种鸡,判断 鸡一百鸡且钱花一百则输出各种鸡的数量。
但是三个循环的时间成本太高,可以用组合的方法,即公鸡和母鸡的数量知道了,小鸡的数量就等于100 - gongji - muji,这样执行次数就降了100次,大量节约了时间成本,虽然在这个小程序中影响不是很大,但要是数据量大了,这是一个很可观的节省。
还有一个小细节难住了我,三只小鸡值一钱该怎么表示呢?是应该用浮点数吗?
若小鸡不能被3整除,即小鸡的个数不是3的倍数,钱当然也不能为0整数,即钱数达不到整数100,在判断的时候
if( gongji + muji + xiaoji == 100 && gongji*5 + muji*3 + xiaoji / 3.0 == 100)
若不用浮点数计算,会把一些不能整除的数的结果看成能整除的,导致输出了不符合的结果
int gongji;
int muji;
int xiaoji;
for( gongji = 0; gongji < 20; gongji++)
{
for(muji = 0; muji < 33; muji++)
{
xiaoji = 100 - gongji - muji;
//小鸡个数除以3的问题:若小鸡不能被3整除,则达不到整数100,若不用浮点数计算,会把一些不能整除的数的结果看成能整除的,导致输出了不符合的结果
if( gongji + muji + xiaoji == 100 && gongji*5 + muji*3 + xiaoji / 3.0 == 100)
printf("公鸡:%d,母鸡:%d,小鸡:%d\n",gongji,muji,xiaoji);
}
}