C语言编程:100匹马驼100担货,大马一匹驼3担,中马一匹驼2担,小马两匹驼一担。

当可以缺少一种或两种时,输出所有组合法?(需用do-while)
2024-12-16 06:29:11
推荐回答(3个)
回答1:

大马最多33匹,中马最多50匹,小马最多100匹。
#include
void main(void){
int a=0; //大马
int b=0; //中马
int c=0; //小马驮货数
int d; //小马
int n=0; //个数
do{
c=c+1;
if(3*a+2*b+c==100&&a+b+2*c==100){
d=2*c;
printf("大马、中马、小马分别为:%d,%d,%d\n",a,b,d);
n=n+1;
}
if(c==100){
c=0;
b=b+1;
}
if(b==50){
b=0;
a=a+1;
}
}while(a<=33);
printf("共有%d种方法。\n",n);
}
输出屏幕是放不下结果的,建议你改成向文件输出。

回答2:

//VC6.0编译运行通过
/*
100匹马驼100担货,大马一匹驼3担,中马一匹驼2担,小马两匹驼一担。
输出所有组合法?
*/
# include
# define SUM 100
int main(void)
{
int d=1, z=0, x=0, n=0;
do
{
z=1;
do
{
x=2;
do
{
if( (3*d+2*z+x/2 == 100) && (d+z+x == 100) )
{
printf( "大马%d 中马%d 小马%d\n", d, z, x );
n++;
}
x += 2;
}while(x z++;
}while(z d++;
}while(d printf("共有 %d 中方法.\n",n);
return 0;
}

回答3:

#include
void main()
{
int i,j, k;
int n=0;
for(i=1; i<33; i++)
for(j=1; j<50; j++)
for(k=2; k<100; k+=2)
if(((i*3+j*2+k/2)==100)&&(i+j+k==100))
{
n++;
printf("大马%d 中马%d 小马%d\n", i, j, k );
}
printf("方法共有%d", n);
}