标签:main 问题 表达式 nbsp \n 必须 lib 因此 stdio.h
课本P61页介绍了穷举法,并结合案例3.7解决了百鸡百钱问题.
题目:公鸡5钱1只;母鸡3钱1只;雏鸡1钱3只.百钱买百鸡,求各几只.
书上给出了一种简化算法:
设chick = 100 - hen - rooster 代替判定条件 rooster + hen + chick = 100,
因此只需二重循环即可解决问题.
而这个问题,经过思考之后,可以由一重循环求解.
#include <stdio.h> #include <stdlib.h> int main() { int rooster, hen, chick; int count; count = 0; //设公鸡r只,母鸡h只,雏鸡c只 //由计算可得,r = (4 * c - 300) / 3 //但是必须使等式有意义,即r>=0,即可求解出r的范围:r>=75 //此外,因为1钱可买3雏鸡,雏鸡的数量c必须是3的整数倍* //经检验,75是>=75且能被三整除的最小整数 //由*可知,雏鸡增加的数量也必须为3的整数倍,所以变量c每次加3 for(chick = 75; chick <= 300; chick = chick + 3) //这条语句限定了chick的范围 75~300 { count++; if ((4 * chick - 300) % 3 == 0)//rooster表达式递增且大于0,但要保证为整数 { rooster = (4 * chick - 300) / 3; hen = (600 - 7 * chick) / 3;//这里无需检验hen是否为整数,因为hen=100-r-c,且前面保证了r,c为整数 if (hen >= 0)//因为hen的表达式递减,这条语句限定了hen的范围>0 printf("Rooster: %d, Hen: %d, Chick: %d\n", rooster, hen, chick); else break; } } printf("Total count: %d", count); return 0; }
输出如下:
Rooster: 0, Hen: 25, Chick: 75
Rooster: 4, Hen: 18, Chick: 78
Rooster: 8, Hen: 11, Chick: 81
Rooster: 12, Hen: 4, Chick: 84
Total count: 5
五次循环结束问题.
标签:main 问题 表达式 nbsp \n 必须 lib 因此 stdio.h
原文地址:https://www.cnblogs.com/nester/p/9692496.html