读书人

搬砖有关问题

发布时间: 2012-03-06 20:47:55 作者: rapoo

搬砖问题
现有36砖和36人,男人一人搬3砖,女人一人搬2砖,小孩3人搬1砖,请问36搬36快砖,该如何分配?(男人,女人,小孩,都不能为0,答案只有一个解);
我就不明白为什么只有一解。这是一道上机题。我只能得19分,语法15分,结果4分。总分是30分。智者帮忙写一下。谢谢!

[解决办法]
#include <iostream>

using namespace std;

int main() {
for (int i = 1; i < 12; i++) {
for (int j = 1; j < 18; j++) {
for (int k = 3; k < 36; k += 3) {
if (i + j + k == 36) {
if ((i * 3 + j * 2 + k / 3) == 36) {
cout < < "man: " < < i < < endl < < "women: " < < j < < endl < < "child: " < < k < < endl;
}
}
}
}
}

return 0;
}
[解决办法]
先进行数学分析,设有a个男人,b个女人和c个小孩,得出如下方程
a+b+c=36; 3a+2b+c/3=36; => 8a+5b=72; 0 <a <(36/3); 0 <b <(36/2);
然后再编程,可以发现能减少穷举次数
for (int a=1; a <36/3; ++a)
for (intb=1; b <36/2; ++b)
if (8*a+5*b == 72)
{ c=36-a-b; cout < < "mans= " < <a < < ",womans= " < <b < < ",boys= " < <c < <endl;}

读书人网 >C语言

热点推荐