使用 C++ 使整个数组功能强大的最少 1 秒
我们得到一个二进制数组,它可以存储任何给定大小的数字1和0,以及一个整数变量,比如base。任务是计算可以为二进制数组的其他元素提供功率的最小1,从而使整个数组变得强大。一个元素可以为它的相邻元素或小于base的距离内的任何其他元素提供能量。
让我们看看这个的各种输入输出场景-
In−intarr[]={1,1,0,1,1,0,1},intbase=7
Out-借力使整个阵列强大的最小1s是:1
解释-我们得到一个大小为7的二进制数组和一个基数为7的值,这意味着第一个遇到的数字1可以为整个数组提供能量。因此,arr[1]处的数字1可以为数组的所有其他元素提供能量。
In−intarr[]={1,1,0,1,1,0,1},intbase=3
Out-借力使整个阵列强大的最小1s是:2
解释-我们得到一个大小为7的二进制数组和一个基数为2的值,这意味着遇到的第一个数字1可以为数组的下两个元素提供功率。因此,arr[2]处的数字1可以为数组的下两个元素提供能量,而arr[5]处的另一个数字可以为数组的下两个元素提供能量,从而使整个数组变得强大。
In−intarr[]={1,1,0,1,1,0,1},intbase=1
Out-不可能使整个阵列强大
解释-我们得到一个大小为7的二进制数组和一个base值为1的值,这意味着遇到的第一个数字1可以为数组的下一个元素提供功率。所以,不可能让整个阵法强大。
以下程序中使用的方法如下-
输入任何给定大小的二进制数组和一个整数变量,比如说,base
计算数组的大小并声明一个变量,例如整数类型的val
通过调用函数设置val,该函数将返回创建强大数组所需的最小1,如果不可能,则它将返回-1,这将进一步显示错误消息。
内部函数Lend_Power(intarr[],intsize,intbase)
声明一个具有二进制数组大小的整数类型值数组。
将临时变量声明为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)]。
检查IFset=-1ORset+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