【发布时间】:2020-02-15 00:55:49
【问题描述】:
我们正在使用 Excel 解决具有以下设置和条件的问题,但我想通过用 C++ 编写一些代码来找到解决方案,这是我在一些学校课程中最熟悉的.
我们有 4 家商店需要投资 1000 万美元。主要条件是:
- 每家店铺至少要投资100万。
- 4家店的投资总和要1000万。
- 按照以上规则,单店最多可投资700万
根据每家商店的投资金额,每家商店都有自己独特的投资回报百分比。 也就是说,每家店铺的投资,都可以获得大量的组合。只要每个组合的总数为 10,数字的重复无关紧要,但数字的顺序很重要。
如果我的数学是正确的,那么组合的总数是 7^4 = 2401,但是工作解决方案的数量 由于每个组合的总和必须等于 10,因此较小。
我在 C++ 中尝试做的是使用循环来用 4 个数字填充每一行,使得它们的总和等于 10(百万),例如:
7 1 1 1
1 7 1 1
1 1 7 1
1 1 1 7
6 2 1 1
6 1 2 1
6 1 1 2
5 3 1 1
5 1 3 1
5 1 1 3
5 1 2 2
5 2 1 2
5 2 2 1
我很感激有关如何解决此问题的建议。仍然不太确定在使用数组时使用循环是否是一个好主意(也许是二维数组/向量?)我有一个模糊的想法,也许递归函数会促进解决方案。
感谢您花时间阅读,感谢您提出解决方案的所有建议。
编辑: 这是我处理的一些代码,仅用于随机化 50 行数字。仍然要实现有效行组合必须是4之间的总和为10的条件;
int main(){
const int rows = 50;
int values[rows][4];
for (int i = 0; i < 50; i++) {
for (int j = 0; j <= 3; j++){
values[i][j]= (rand() % 7 + 1);
cout << values[i][j] << " ";
}
cout << endl;
}
}
【问题讨论】:
-
每项投资是否需要被 100 万美元整除?最小的投资金额是多少?
-
每家商店的最小数量为 1(以百万计)。我们并没有真正处理数字的分数,因为我们将每个数量乘以一个单独的固定百分比投资表,但这是一个单独的问题。
-
我知道最小的数量是 100 万,但是可以在商店中投资 1,000,001 美元吗?有可能在一家商店投资 1,100,000 美元吗?
-
你有没有尝试过?有代码吗?
-
嗯,好的,答案是否定的。它要么投资 100 万,要么 2,3... 最多 7 个。你明白了。
标签: c++ arrays loops discrete-mathematics