1。 没错
2。 是
3。 == 代表判断是否相等 , 如果相等就是得到正确答案,就执行后面的printf输出结果
4。 ++代表加1。 实际就是 hens = hens + 1
#include
void main()
{
int mj,gj,xj,n=0;
printf(“ 百元买百鸡问题求解方案\n”) ;
printf(“ ----------------------\n”) ;
printf(“\t母鸡\t公鸡\t小鸡\n”) ;
for(mj=0;mj<=100;mj++)
for(gj=0;gj<=100;gj++)
{
xj=100-mj-gj;
if(xj*0.5+mj*3+gj*2==100)
{
n++;
printf(“方案%d:\t%d\t%d\t%d\n”,n,mj,gj,xj);
}
}
}
这段代码中小鸡价值半钱,母鸡价值3钱,公鸡价值2钱,允许某种鸡只数为零
如果和你的题目不同的话,对代码略作修改即可
c/3的值是一个整形,无论c 取什么值。比如c=1,则c/3=0;若c=5,则c/3=1; 1.0*c/3的值是一个浮点型的,也就是小数,比如c=3,则c/3=1.00,若c=4;则c/3=1.333。 所以在解这道题的时候,用c/3是怎么好的,应该用1.0*c/3
百钱百鸡问题中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题”:鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
*题目分析与算法设计设鸡翁、鸡母、鸡雏的个数分别为cocks(x),hens(y),chicks(z),题意给定共100钱要买百鸡,若全买公鸡最多买20只,显然cocks的值在0~20之间;
同理,hens的取值范围在0~33之间,可得到下面的不定方程: 5x+3y+z/3=100 x+y+z=100 所以此问题可归结为求这个不定方程的整数解。由程序设计实现不定方程的求解与手工计算不同。在分析确定方程中未知数变化范围的前提下,可通过对未知数可变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。
程序解释
main()
{
int cocks=0,hens,chicks;
while (cocks<=19) //公鸡只数小于19
{hens=0;
while(hens<=33) //母鸡小于33只
{chicks=100-cocks-hens;
if (5.0*cocks+3.0*hens+chicks/3.0==100.0)
printf(“%d %d %d\n”,cocks,hens,chicks);
hens++;
}
cocks++;
}
}
*总是的进一步讨论这类求解不定方程总理的实现,各层循环的控制变量直接与方程未知数有关,且采用对未知数的取值范上穷举和组合的方法来复盖可能得到的全部各组解。能否根据题意更合理的设置循环控制条件来减少这种穷举和组合的次数,提高程序的执行效率,请读者考虑
- 上一篇:xxx的是什么成语
- 下一篇:lol为什么说上路兵线长?地图不是一个正方形吗?