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

C++を使用してアレイ全体を強力にするための電力を提供するための最小1


任意のサイズの1と0の数字を格納できるバイナリ配列と、たとえば底辺の整数変数が与えられます。タスクは、アレイ全体が強力になるように、バイナリアレイの他の要素に電力を供給することができる最小の1を計算することです。要素は、隣接する要素またはベースよりも短い距離内にある他の要素に電力を供給することができます。

このためのさまざまな入出力シナリオを見てみましょう-

で- int arr [] ={1、1、0、1、1、0、1}、int base =7

アウト- アレイ全体を強力にするために電力を供給するための最小1は、次のとおりです。1

説明- サイズ7のバイナリ配列と7としての基数の値が与えられます。これは、最初に検出された数字1が配列全体に電力を供給できることを意味します。したがって、arr [1]の数字1は、配列の他のすべての要素に電力を供給することができます。

で- int arr [] ={1、1、0、1、1、0、1}、int base =3

アウト- アレイ全体を強力にするために電力を供給するための最小1は、次のとおりです。2

説明- サイズ7のバイナリ配列と2としての基数の値が与えられます。これは、最初に検出された数字1が配列の次の2つの要素に電力を供給できることを意味します。したがって、arr [2]の数字1は、アレイの次の2つの要素に電力を供給でき、arr [5]の別の数字は、アレイ全体を強力にするアレイの次の2つの要素に電力を供給できます。

で- int arr [] ={1、1、0、1、1、0、1}、int base =1

アウト- アレイ全体を強力にすることは不可能です

説明- サイズ7のバイナリ配列と1としての基数の値が与えられます。これは、最初に検出された数字1が配列の次の単一要素に電力を供給できることを意味します。したがって、アレイ全体を強力にすることは不可能です。

以下のプログラムで使用されるアプローチは次のとおりです-

  • 任意のサイズのバイナリ配列と整数変数を入力します。たとえば、base

  • 配列のサイズを計算し、変数を宣言します。たとえば、整数型のval

  • 強力な配列を作成するために必要な最小値1を返す関数を呼び出して、valを設定します。それが不可能な場合は、-1を返し、さらにエラーメッセージを表示します。

  • 関数Lend_Power(int arr []、int size、int base)の内部

    • バイナリ配列のサイズで整数型の値の配列を宣言します。

    • 一時変数をtempとして宣言し、-1に設定し、カウントして0に設定します。

    • 配列のサイズまで、iから0までのループFORを開始します。ループ内で、arr [i]が1に等しいかどうかを確認してから、tempをiに設定し、arr_2[i]をtempに設定します

    • ループFORを0から配列のサイズまで開始し、reset_baseをi + base-1として設定し、reset_sizeをsize-1として設定します。変数セットをarr_2 [min(reset_base、reset_size)]として設定します。

    • IF set=-1または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<<"Minimum 1s to lend power to make whole array powerful are: "<<val;
   }
   return 0;
}
出力

上記のコードを実行すると、次のOutが生成されます

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

  1. STLを使用したC++の配列製品

    これは、配列製品を見つけるためのC++プログラムの例です。 アルゴリズム Begin Initialize the values of array. Call used defined function accumulate to return the product of array. Print the solution. End. サンプルコード #include <iostream> #include <numeric> using namespace std; int ProductOfArray(int p[], int n) { &nbs

  2. newを使用してC++で2D配列を宣言するにはどうすればよいですか

    動的2D配列は、基本的に配列へのポインターの配列です。これは、寸法が3x4の2D配列の図です。 アルゴリズム Begin    Declare dimension of the array.    Dynamic allocate 2D array a[][] using new.    Fill the array with the elements.    Print the array.    Clear the memory by deleting it. End サンプルコード