问一个C语言编程问题。

题目是:
100匹马驮100担货,大马能驮3担,中马能驮2担,小马1担。
1、当大马,中马,小马每种不能少于1匹,有多少种组合法。
2、当可以缺少一种或两种,又有多少种组合法。
用while ,do.....while语句。
请给出详细的代码,有解释最好。
谢谢!
打错了,小马是2匹驮一担!!!
如果不用while do...while语句该怎么写这程序?

给,已经编译运行确认:
1. 当大马,中马,小马每种不能少于1匹,有多少种组合法。
#include<stdio.h>
#include<conio.h>

int main()
{
int i,j,k;
int count=0;

i=1;
j=1;
k=2;

while(i<100)
{
while(j<100)
{
while(k<100)
{
if((i+j+k==100)&&(3*i+2*j+k/2==100))
{
printf("大马:%d 中马:%d 小马:%d\n",i,j,k);
count++;
}
k=k+2;
}
k=2;
j++;
}
j=1;
i++;
}

printf("一共%d种组合法\n",count);
getch();
return 1;
}

运行结果为:
大马:2 中马:30 小马:68
大马:5 中马:25 小马:70
大马:8 中马:20 小马:72
大马:11 中马:15 小马:74
大马:14 中马:10 小马:76
大马:17 中马:5 小马:78
一共6种组合法

2. 当可以缺少一种或两种,又有多少种组合法。
#include<stdio.h>
#include<conio.h>

int main()
{
int i,j,k;
int count=0;

i=0;
j=0;
k=0;

while(i<100)
{
while(j<100)
{
while(k<100)
{
if((i+j+k==100)&&(3*i+2*j+k/2==100))
{
printf("大马:%d 中马:%d 小马:%d\n",i,j,k);
count++;
}
k=k+2;
}
k=0;
j++;
}
j=0;
i++;
}

printf("一共%d种组合法\n",count);
getch();
return 1;
}

运行结果为:
大马:2 中马:30 小马:68
大马:5 中马:25 小马:70
大马:8 中马:20 小马:72
大马:11 中马:15 小马:74
大马:14 中马:10 小马:76
大马:17 中马:5 小马:78
大马:20 中马:0 小马:80
一共7种组合法

=====================================
如果不用while do...while语句该怎么写这程序?
=====================================
大哥,你早说啊,不用while更简单:
1. 当大马,中马,小马每种不能少于1匹,有多少种组合法。
#include<stdio.h>
#include<conio.h>

int main()
{
int i,j,k,count=0;

for(i=1;i<100;i++)//大马
for(j=1;j<100;j++)//中马
for(k=2;k<100;k=k+2)//小马 步长为2,因为小马不能为奇数,否则将有一个小马驮半担货

if((i+j+k==100)&&(3*i+2*j+k/2==100))
{
printf("大马:%d 中马:%d 小马:%d\n",i,j,k);
count++;
}

printf("一共%d种组合法\n",count);
getch();
return 1;
}

2. 当可以缺少一种或两种,又有多少种组合法。
#include<stdio.h>
#include<conio.h>

int main()
{
int i,j,k,count=0;

for(i=0;i<100;i++)//大马
for(j=0;j<100;j++)//中马
for(k=0;k<100;k=k+2)//小马 步长为2,因为小马不能为奇数,否则将有一个小马驮半担货

if((i+j+k==100)&&(3*i+2*j+k/2==100))
{
printf("大马:%d 中马:%d 小马:%d\n",i,j,k);
count++;
}

printf("一共%d种组合法\n",count);
getch();
return 1;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-07
#include"stdio.h"
#include<math.h>
int
main(void)
{
double
e,pi;
double
funpi(double
e);
printf("Enter
e:");
scanf("%lf",&e);
pi=funpi(e);
printf("pi=%.4lf",pi);
//输出格式%lf.
并且是输出pi的值.而不是地址.所以不用加&
return
0;
}
double
funpi(double
e)
{
int
denominator,flag;
double
item,sum;
flag=1;
denominator=1;
item=1.0;
sum=0;
while(fabs(item)>=e){
item=flag*1.0/denominator;
sum=sum+item;
flag=-flag;
denominator=denominator+2;
}
return
sum*4;
}
第2个回答  2019-07-01
错误之处:主函数中的printf("pi=%.4f",&pi);
应该为:
printf("pi=%.4f",pi);
即输出语句pi前不能有取地址运算符。
e值越小越精确,是吧!呵呵。
第3个回答  2009-04-07
1、当大马,中马,小马每种不能少于1匹,有多少种组合法。 余下的你自己依此类推。

mian()
{
int a=1; /*大*/
int b=1; /*中*/
int c=1; /*小*/
int n=0; /*计数*/
/*使用多重循环,先是小的从1开始,一直到100-(a+b),然后通过if语句判断有没有合适的,如有,则计数器加1。
*/
for(a=1;a<=100-(b+c);a++)
{ for(b=1;b<=100-(a+c);b++)
{
for(c=1;c<=100-(a+b);c++)
{
if(a+b+c==100&&3*a+2*b+1.0/2*c==100)
n++;
}
}
}
printf("%d",n);
}
为什么循环条件不是小于100呢?当大马为1,中马为1时,小马最多为100-大中马。并且小马也可以是单数。因为小马也可以不担的嘛。题目意思如此。
第4个回答  2009-04-07
你这根本不能实现的啊,
100匹马全部是小马的话就已经达到100担货了