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

因此,在適配後,牆上沒有剩餘長度。

解決方案方法

解決此問題的一個簡單方法是使用蠻力法,即檢查在牆上適配貨架的每種可能組合,並找到使牆上剩餘空間最小化或消除剩餘空間的組合。對於次要任務,我們將首先開始適配較長尺寸的貨架,這將使較長尺寸的貨架具有優先順序。我們將看看哪種組合在獲得最佳解決方案時,能以最大可能數量的較大貨架,給出最小結果。

示例

程式說明了我們解決方案的工作原理

#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;
}

輸出

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

更新於: 2022-01-31

276 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.