使用 C++ 使整个数组功能强大的最少 1 秒

我们得到一个二进制数组,它可以存储任何给定大小的数字 1 和 0,以及一个整数变量,比如 base。任务是计算可以为二进制数组的其他元素提供功率的最小 1,从而使整个数组变得强大。一个元素可以为它的相邻元素或小于 base 的距离内的任何其他元素提供能量。

让我们看看这个的各种输入输出场景 -

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

Out -借力使整个阵列强大的最小 1s 是:1

解释 -我们得到一个大小为 7 的二进制数组和一个基数为 7 的值,这意味着第一个遇到的数字 1 可以为整个数组提供能量。因此,arr[1] 处的数字 1 可以为数组的所有其他元素提供能量。

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

Out -借力使整个阵列强大的最小 1s 是:2

解释 -我们得到一个大小为 7 的二进制数组和一个基数为 2 的值,这意味着遇到的第一个数字 1 可以为数组的下两个元素提供功率。因此,arr[2] 处的数字 1 可以为数组的下两个元素提供能量,而 arr[5] 处的另一个数字可以为数组的下两个元素提供能量,从而使整个数组变得强大。

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

Out -不可能使整个阵列强大

解释 -我们得到一个大小为 7 的二进制数组和一个 base 值为 1 的值,这意味着遇到的第一个数字 1 可以为数组的下一个元素提供功率。所以,不可能让整个阵法强大。

以下程序中使用的方法如下 -

  • 输入任何给定大小的二进制数组和一个整数变量,比如说,base

  • 计算数组的大小并声明一个变量,例如整数类型的 val

  • 通过调用函数设置 val,该函数将返回创建强大数组所需的最小 1,如果不可能,则它将返回 -1,这将进一步显示错误消息。

  • 内部函数 Lend_Power(int arr[], int size, int base)

    • 声明一个具有二进制数组大小的整数类型值数组。

    • 将临时变量声明为 temp 并将其设置为 -1 并计数并将其设置为 0。

    • 从 i 到 0 开始循环 FOR 直到数组的大小。在循环内,检查如果 arr[i] 等于 1 然后将 temp 设置为 i 并将 arr_2[i] 设置为 temp

    • 从 0 开始循环 FOR,直到数组的大小,并将 reset_base 设置为 i + base - 1,将 reset_size 设置为 size - 1。将变量设置为 arr_2[ min(reset_base, reset_size)]。

    • 检查 IF set = -1 OR set + base <= i 然后返回 -1

    • 将变量 'i' 设置为 set + base。

  • 返回计数。

示例

#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<<"借力使整个阵列强大的最少 1 秒是: "<<val;
   }
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出

借力使整个阵列强大的最少 1 秒是: 3

猜你喜欢