使用C++使整個陣列強大的最小1s借力


我們得到一個二進位制陣列,它可以儲存任何給定大小的數字1和0,以及一個整數變數,例如base。任務是計算可以借力給二進位制陣列其他元素的最小1的數量,以使整個陣列變得強大。一個元素可以借力給其相鄰元素或距離小於base的任何其他元素。

讓我們看看這種情況下的各種輸入輸出場景:

輸入 − int arr[] = {1, 1, 0, 1, 1, 0, 1}, int base = 7

輸出 −使整個陣列強大的最小1s借力數量為:1

解釋 −我們得到一個大小為7的二進位制陣列和base值為7,這意味著遇到的第一個數字1可以借力給整個陣列。因此,arr[1]處的數字1可以借力給陣列的所有其他元素。

輸入 −int arr[] = {1, 1, 0, 1, 1, 0, 1}, int base = 3

輸出 −使整個陣列強大的最小1s借力數量為:2

解釋 −我們得到一個大小為7的二進位制陣列和base值為3,這意味著遇到的第一個數字1可以借力給陣列的接下來的兩個元素。因此,arr[2]處的數字1可以借力給陣列的接下來的兩個元素,而arr[5]處的另一個數字1可以借力給陣列的接下來的兩個元素,這使得整個陣列變得強大。

輸入 −int arr[] = {1, 1, 0, 1, 1, 0, 1}, int base = 1

輸出 −無法使整個陣列強大

解釋 −我們得到一個大小為7的二進位制陣列和base值為1,這意味著遇到的第一個數字1可以借力給陣列的下一個單個元素。因此,無法使整個陣列強大。

下面程式中使用的方法如下:

  • 輸入任何給定大小的二進位制陣列和一個整數變數,例如base

  • 計算陣列的大小並宣告一個整數型別的變數,例如val

  • 將val設定為一個函式呼叫的結果,該函式將返回建立強大陣列所需的最小1的數量,如果不可能,則返回-1,這將進一步顯示錯誤訊息。

  • 在函式Lend_Power(int arr[], int size, int base)內部

    • 宣告一個整數型別值的陣列,其大小為二進位制陣列的大小。

    • 宣告一個臨時變數temp並將其設定為-1,並宣告一個計數器變數count並將其設定為0。

    • 從i=0開始迴圈到陣列的大小。在迴圈內部,檢查IF arr[i]等於1,則將temp設定為i並將arr_2[i]設定為temp

    • 從0開始迴圈到陣列的大小,並將reset_base設定為i + base - 1,並將reset_size設定為size - 1。將變數set設定為arr_2[min(reset_base, reset_size)]。

    • 檢查IF set = -1 OR set + base <= i,則返回-1

    • 將變數'i'設定為set + base。

  • 返回count。

示例

#include<bits/stdc++.h>
using namespace std;

int Lend_Power(int arr[], int size, int base)
{
   int arr_2[size];
   int temp = -1;
   int count = 0;
   for(int i = 0; i < size; i++)
   {
      if(arr[i] == 1)
      {
         temp = i;
      }
      arr_2[i] = temp;
   }
   for(int i = 0; i < size;)
   {
      int reset_base = i + base - 1;
      int reset_size = size - 1;

      int set = arr_2[min(reset_base, reset_size)];
      if(set == -1 || set + base <= i)
      {
         return -1;
      }
      i = set + base;
      count++;
   }
   return count;
}
int main()
{
   int arr[] = {1, 1, 0, 1, 1, 0, 1};
   int base = 2;
   int size = sizeof(arr) / sizeof(arr[0]);
   int val = Lend_Power(arr, size, base);
   if(val == -1)
   {
      cout<<"Impossible to make entire array powerful";
   }
   else
   {
      cout<<"Minimum 1s to lend power to make whole array powerful are: "<<val;
   }
   return 0;
}

輸出

如果執行以上程式碼,它將生成以下輸出

Minimum 1s to lend power to make whole array powerful are: 3

更新於:2021年10月21日

瀏覽量:59

開啟您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.