C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++を使用して配信されるアイテムの最小数。


問題の説明

サイズの配列が与えられると、Nはバケットを表し、各配列インデックスにはアイテムが含まれます。すべてのアイテムを配達する必要があるKツアーを考えます。 1回のツアーで1つのバケットからのみアイテムを取得できます。タスクは、すべてのアイテムをKツアー内で配信できるように、ツアーごとに配信する必要のあるアイテムの最小数を指示することです。

アイテム={1、3、5、7、9}のバケットが5つあり、ツアーが10の場合、一度に3つのアイテムを配信することで、ツアーごとに3つのアイテムを配信できます。

  • 最初のバケットサイズは1であるため、必要なツアーの数=1

  • 2番目のバケットサイズは3であるため、必要なツアーの数=1

  • 3番目のバケットサイズは5であるため、必要なツアーの数=2(ツアーごとに3 + 2アイテム)

  • 4番目のバケットサイズは7であるため、必要なツアーの数=3(ツアーごとに3 + 3 + 1アイテム)

  • 5番目のバケットサイズは9であるため、必要なツアーの数=3(ツアーごとに3 + 3 + 3アイテム)

ツアーの総数=10

アルゴリズム

1. find the minimum number of items to be distributed per delivery
2. iterate from 1 to the maximum value of items in a bucket and calculate the number of tours required for each bucket and find the total number of tours for complete delivery
3. The first such value with tours less than or equals K gives the required number

#include <iostream>
#include <climits>
#include <cmath>
#define SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
using namespace std;
int minItemsDeliveried(int *arr, int n, int k){
   int maxElement = INT_MIN;
   for (int i = 0; i < n; ++i) {
      maxElement = max(maxElement, arr[i]);
   }
   for (int i = 1; i < maxElement + 1; ++i) {
      int tours = 0;
      for (int j = 0; j < n; ++j) {
         if (arr[i] % i == 0) {
            tours += arr[j] / i;
         } else {
            tours += floor(arr[j] / i) + 1;
         }
      }
      if (tours <= k) {
         return i;
      }
   }
   return 1;
}
int main(){
   int arr[] = {1, 3, 5, 7, 9};
   int k = 10;
   cout << "Minimum items to be delivered = " <<
   minItemsDeliveried(arr, SIZE(arr), k) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Minimum items to be delivered = 3

  1. C++を使用して中央値をxに等しくするために追加する要素の最小数。

    問題の説明 サイズnと要素xの配列「arr」が与えられた場合、タスクは、中央値がxに等しくなるように配列に追加される要素の最小数を見つけることです。 長さnの配列の中央値は、要素を降順ではない順序で並べ替えた後、位置番号(n-1)/2を占める要素です。たとえば、以下の配列の中央値は20-です。 arr1 [] ={10、20、30、40} arr [] ={1、2、3}およびx =4の場合、中央値を4に等しくするために、配列に4つの数値、つまり{4、5、5、5}を追加する必要があります アルゴリズム アルゴリズムは非常に単純です。配列の中央値がxと等しくなるまで、配列に1つの数値x

  2. C ++を使用して、数の因数の最小合計を求めます。

    ここでは、与えられた数の因子の最小合計を取得する方法を見ていきます。数が12であると仮定します。これはさまざまな方法で因数分解できます- 12 =12 * 1(12 + 1 =13) 12 =2 * 6(2 + 6 =8) 12 =3 * 4(3 + 4 =7) 12 =2 * 2 * 3(2 + 2 + 3 =7) 最小の合計は7です。数値を取り、最小の因子の合計を見つけようとします。最小の因数分解の合計を取得するには、可能な限り数を因数分解する必要があります。言い換えれば、素因数を足して合計Sを求めようとすると、その合計は最小化されると言えます。 例 #include<