使用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

开启您的职业生涯

完成课程后获得认证

开始
广告