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

すべての要素がk以上になるまで配列の要素を追加するC++プログラム


ソートされていない要素の配列、つまりarr []があり、整数Kがあり、すべての要素を以上にするために配列の要素を追加するために必要な最小ステップ数を見つける必要があります。 K 。配列の2つの要素を追加して、それらを1つにすることができます。

Input: arr[] = {1 10 12 9 2 3},K = 6
Output: 2

説明

まず、(1 + 2)を追加できます 、したがって、新しい配列は 3 10 12 9 3 (3 + 3)を追加できます 、したがって、新しい配列は 6 10 12 9 、リスト内のすべての要素が 6より大きいことがわかります 。したがって、出力は

2 つまり、 2 これを行うには操作が必要です。

#include <bits/stdc++.h>
using namespace std;
class MinHeap {
   int *harr;
   int capacity;
   int heap_size;
   public:
   MinHeap(int *arr, int capacity);
   void heapify(int );
   int parent(int i) {
      return (i-1)/2;
   }
   int left(int i) {
      return (2*i + 1);
   }
   int right(int i) {
      return (2*i + 2);
   }
   int extractMin();
   int getMin() {
      return harr[0];
   }
   int getSize() {
      return heap_size;
   }
   void insertKey(int k);
};
MinHeap::MinHeap(int arr[], int n) {
   heap_size = n;
   capacity = n;
   harr = new int[n];
   for (int i=0; i<n; i++)
      harr[i] = arr[i];
   for (int i=n/2-1; i>=0; i--)
      heapify(i);
}
void MinHeap::insertKey(int k) {
   heap_size++;
   int i = heap_size - 1;
   harr[i] = k;
   while (i != 0 && harr[parent(i)] > harr[i]) {
      swap(harr[i], harr[parent(i)]);
      i = parent(i);
   }
}
int MinHeap::extractMin() {
   if (heap_size <= 0)
      return INT_MAX;
   if (heap_size == 1) {
      heap_size--;
      return harr[0];
   }
   int root = harr[0];
   harr[0] = harr[heap_size-1];
   heap_size--;
   heapify(0);
   return root;
}
void MinHeap::heapify(int i) {
   int l = left(i);
   int r = right(i);
   int smallest = i;
   if (l < heap_size && harr[l] < harr[i])
      smallest = l;
   if (r < heap_size && harr[r] < harr[smallest])
      smallest = r;
   if (smallest != i) {
      swap(harr[i], harr[smallest]);
      heapify(smallest);
   }
}
int countMinOps(int arr[], int n, int k) {
   MinHeap h(arr, n);
   long int res = 0;
   while (h.getMin() < k) {
      if (h.getSize() == 1)
         return -1;
      int first = h.extractMin();
      int second = h.extractMin();
      h.insertKey(first + second);
      res++;
   }
   return res;
}
int main() {
   int arr[] = {1, 10, 12, 9, 2, 3};
   int n = sizeof(arr)/sizeof(arr[0]);
   int k = 6;
   cout << countMinOps(arr, n, k);
   return 0;
}

出力

2

  1. 配列要素の乗算のためのC++プログラム

    整数要素の配列で与えられ、タスクは配列の要素を乗算して表示することです。 例 Input-: arr[]={1,2,3,4,5,6,7} Output-: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 Input-: arr[]={3, 4,6, 2, 7, 8, 4} Output-: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 以下のプログラムで使用されるアプローチは次のとおりです − 一時変数を初期化して、最終結果を1で格納します ループを0からnまで開始します。nは配列のサイズです 最終結果を得るには、tempの値にarr[i]を掛け続

  2. ポインタを使用して配列の要素にアクセスするC++プログラム

    ポインタは、変数のメモリ位置またはアドレスを格納します。つまり、ポインタはメモリ位置を参照し、そのメモリ位置に格納されている値を取得することは、ポインタの逆参照と呼ばれます。 ポインタを使用して配列の単一の要素にアクセスするプログラムは、次のようになります- 例 #include <iostream> using namespace std; int main() {    int arr[5] = {5, 2, 9, 4, 1};    int *ptr = &arr[2];    cout<<&q