首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

搬砖有关问题

2012-03-06 
搬砖问题现有36砖和36人,男人一人搬3砖,女人一人搬2砖,小孩3人搬1砖,请问36搬36快砖,该如何分配?(男人,女

搬砖问题
现有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;}

热点排行