C++ 中的货架适配问题


在这个问题中,我们得到了三个整数值 W、n、m,分别表示墙的长度 W、货架的大小 n 和 m。我们的任务是 *创建一个程序来解决货架适配问题*。

我们需要找到一种方法来适配货架,使适配货架后剩余的空间最小化。解决问题时的另一个约束条件是制造成本,较大的货架更具成本效益,因此我们需要优先考虑它们。

输出应采用以下格式:

n 尺寸货架的数量 m 尺寸货架的数量 剩余空间

让我们举个例子来理解这个问题

Input: W = 12, n = 5, m = 3
Output: 0 4 0

解释

在这里,我们可以在墙上精确地放置 4 个 3 尺寸的货架。

这将使总长度 = 4 * 3 = 12

因此,在适配后,墙上没有剩余长度。

解决方案方法

解决此问题的一个简单方法是使用蛮力法,即检查在墙上适配货架的每种可能组合,并找到使墙上剩余空间最小化或消除剩余空间的组合。对于次要任务,我们将首先开始适配较长尺寸的货架,这将使较长尺寸的货架具有优先级。我们将看看哪种组合在获得最佳解决方案时,能以最大可能数量的较大货架,给出最小结果。

示例

程序说明了我们解决方案的工作原理

Open Compiler
#include <bits/stdc++.h> using namespace std; void solveFittingShelves(int wall, int m, int n){ int numM = 0, numN = 0, minSpaceLeft = wall; int p = wall/m, q = 0, rem = wall%m; numM = p; numN = q; minSpaceLeft = rem; while (wall >= n) { q += 1; wall = wall - n; p = wall / m; rem = wall % m; if (rem <= minSpaceLeft) { numM = p; numN = q; minSpaceLeft = rem; } } cout<<numM<<" "<<numN<<" "<<minSpaceLeft<<endl; } int main(){ int W = 29, m = 3, n = 9; cout<<"Length of wall : "<<W<<endl; cout<<"Length of shelves : "<<m<<"\t"<<n<<endl; cout<<"Optimal Shelves fitting : "; solveFittingShelves(W, m, n); return 0; }

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

Length of wall : 29
Length of shelves : 3 9
Optimal Shelves fitting : 0 3 2

更新于: 2022-01-31

276 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告