百马百担问题。有100匹马驮100担货,大马驮3担,中马驮2担,两个小马驮1担。问有大中小马各多少

Python011

百马百担问题。有100匹马驮100担货,大马驮3担,中马驮2担,两个小马驮1担。问有大中小马各多少,第1张

#include <stdio.h>

void main()

{

int big,mid,small,sum=0

for(big=0big<33big++)

for(small=0small<100small+=2)

for(mid=0mid<50mid++)

{

if(3*big+2*mid+small/2==100&&big+mid+small==100)

{

printf("big:%d\tmid:%d\tsmall:%d\n",big,mid,small)

sum++

}

}

printf("%d\n",sum)

}

扩展资料:

假设大马有X匹,中马有Y匹。因为有100匹马,所以有(100-X-Y)匹。又因为大马驮3担,中马驮2担,两个小马驮1担,且100匹马驮100担货,所以有二元一次方程等式为3X+2Y+(100-X-Y)/2=100,化简可得Y=(100-5X)/3。

大马有X匹,中马有(100-5X)/3匹,小马有(200+2X)/3匹。因为大中小马为整数,所以有:

1、大马有2匹,中马有30匹,小马有68匹。

2、大马有5匹,中马有25匹,小马有70匹。

3、大马有8匹,中马有20匹,小马有72匹。

4、大马有11匹,中马有15匹,小马有74匹。

5、大马有14匹,中马有10匹,小马有76匹。

6、大马有17匹,中马有5匹,小马有78匹。

7、大马有20匹,中马有0匹,小马有80匹。

求的是马的个数,所以没有歧义

#include <stdio.h>

int main(void){

int i,j,k

for(i=100/3i>0i--)

for(j=100/2j>0j--)

for(k=100k>0k-=2){

if(((i+j+k)==100)&&((3*i+2*j+k/2 )== 100))

printf("%d ,%d ,%d\n", i,j,k)

}

return 0

}

楼上的说我刚才逻辑错误,其实不然,因为34*3>100所以如果取上值的话,是超过100的,所以直接取下值。

你说逻辑,那我们从逻辑上来论证:

设r = [a/b]+1, 其中a为担总数, b为每马担数

则当[a/b] = a/b时, 有 r = a/b + 1, r>a/b

当[a/b] <a/b 时, 因为 0 <a/b - [a/b] <1, 有 a/b <[a/b] + 1 = r, 即 r >a/b

综上: r >a/b

又:a/b * b = a, 则 必有 r * b >a

根据提设条件对于任意的大马个数x, 有 x*b <= a

因此 r不属于x存在的集合,不在取值范围之列。

仔细思考再下结论