#include <stdio.h>
void main( )
{
int i = 1;
while(i <= 33)
{
if(i * 3 + (100 - i) / 3 == 100)
printf("大僧:%d,小僧:%d/n", i, 100 - i);
++i;
}
}
书中的程序实际上是有问题的!
在用穷举法解决此类问题时要防止因四舍五入而出错的情况。如此题中设大僧每人2个馍,小僧4人一个馍,则问题应该无解,但用例5-4的算法求解时程序却会给出错误的结果:
大僧:43,小僧:57。
可以加一个(100-i) % 3 == 0的条件来防止类似的错误。
练习中要求以小僧的人数为循环变量求解
5.7 以小僧的人数为循环变量求解例5-4。
参考答案为:
#include <stdio.h>
void main( )
{
int i = 3, flag = 0;
while(i <= 99)
{
if(i / 3 + (100 - i) * 3 == 100)
{
printf("大僧:%d,小僧:%d/n", 100 - i, i);
flag = 1;
}
i += 3;
}
if(flag == 0)
printf("无解!/n");
}