c语言循环编程题!!!求解答!!!

100匹马驮100担货,大马一匹驮3担,中马一匹驮2担,小马一匹驮0.5担,计算大中小马匹数的各种组合并输出。

我写的代码是
#include "stdafx.h"

int main()
{
int a,b,c;
a=1;
b=1;
c=1;
while(a<=100)
{
a++;
while(b<=100)
{
b++;
while(c<=100)
{
c++;
{
if((a+b+c)==100&&(3*a+2*b+0.5*c)==100)
printf("a=%d,b=%d,c=%d\n",a,b,c);
}
}
}
}
return 0;
}
急问为何算不出结果???万分感谢!!!

用2重for循环,每次循环的初值为0,每重循环的上限为100担货交由一类马来运所需的最大匹数。剩下的一类马的数量用100减去前两类马的总和即可,判断是否满足运掉100担货。。
(由这个思路也可以看出你代码哪里想的有问题了)
哇,你是在弄 oi 吗?厉害。。。
(看到楼下的解法,我认为一般这类题,会考虑某类马为0的情况)
其实上面的思路里有一些小的优化在里面:
1)每重循环的上限为100担货交由一类马来运所需的最大匹数
【马匹数多了没用】
2)设计成2重循环,最后一类马的马匹数直接用100减去前两种所选马匹数就好了,免去了不必要 的循环。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-22
#include<stdio.h>
int main()
{
int a,b,c;
a=1;
while(a<=100)
{
b=1;//每轮要有初值
while(b<=100)
{
c=2;//同上,最少两个小马
while(c<=100)
{
if((a+b+c)==100&&(3*a+2*b+c/2)==100)//
printf("a=%d,b=%d,c=%d\n",a,b,c);
c+=2;//小马以2的倍数递增
}
b++;//检查完一轮再改变
}
a++;//同上
}
return 0;
}

本回答被提问者采纳
第2个回答  2014-10-22
每次循环开始都要初始化:
b=1;//加这句
while(b<=100)
{
b++;
c=1;//加这句
while(c<=100)
{
第3个回答  2014-10-22
你这样写出程序的运行顺序是这样的:
a==1,b==1时,c从0到100,然后
a==1, c==100时,b从2到100,然后
b ==100, c==100时,a从2到100。
解决方法就是每次增长到100时,要记得恢复为1
第4个回答  2014-10-22
你的#include "stdio.h"错了 然后没有符合的条件就没有输出呗
相似回答