编程,百马百担问题,有100匹马,驮100担货,大马驮三担,中马驮2担,两匹小马驮一担,求大、中、小各多少匹?
编程,百马百担问题,有100匹马,驮100担货,大马驮三担,中马驮2担,两匹小马驮一担,求大、中、小各多少匹?
分享到:
------解决方案--------------------
数学解方程就好了!
#include
int main(void)
{
int Lar = 0, Lit = 0, Nor = 0;
for(Lit = 0; Lit
{
for( Nor = 0; Nor
for(Lar = 0; Lar
if (((Lar + Lit + Nor) == 100) && ((3 * Lar + 2 * Nor + Lit / 2) == 100))
printf("Lar = %d, Nor = %d , Lit = %d \n", Lar, Nor, Lit);
}
return 0;
}
------解决方案--------------------
像这种规模的数据,不优化其实也能秒出的...
无聊了,也写一下:
设大马x匹,中马y匹,小马z匹,则由题设可列方程组:
3x + 2y + z/2 = 100 (1)
x + y + z = 100 (2)
x >= 0 (3)
y >= 0 (4)
z >= 0 && z % 2 == 0 (5)
(1)(2)可化为:
3x + 2y = 100 - z/2 (6)
x + y = 100 - z (7)
可得
x = 1.5z - 100 (8)
y = 200 - 2.5z (9)
将(8)(9)带入(3)(4)可得:
200/3 <= z <= 80 (10)
又由(5)可知:
68 <= z <= 80且z为偶数(11)
从而由(11)(8)(9)可以写出如下代码:
#include
int main()
{
int x, y, z;
for(z = 68; z <= 80; z += 2){
x = (z>>1)*3 - 100;
y = 200 - (z>>1)*5;
printf("大马%d匹,中马%d匹,小马%d匹\n", x, y, z);
}
return 0;
}
------解决方案--------------------
你手动验证下呗#include
using namespace std;
int main()
{
for(int n1=0;n1<100;n1++){
for(int n2=0;n2<100-n1;n2++){
int n3=100-n1-n2;
if(3*n1+2*n2+n3/2==100 && n3%2==0)//n3可为奇数的话,那么有一匹小马是多余的
cout<
}
}
return 0;
}