Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++를 사용하여 전체 어레이를 강력하게 만들기 위한 최소 1초


주어진 크기의 숫자 1과 0을 저장할 수 있는 이진 배열과 정수 변수를 기본으로 제공합니다. 작업은 전체 배열이 강력해지도록 이진 배열의 다른 요소에 전력을 제공할 수 있는 최소 1을 계산하는 것입니다. 요소는 인접한 요소 또는 기본보다 짧은 거리에 있는 다른 요소에 전원을 공급할 수 있습니다.

이에 대한 다양한 입력 출력 시나리오를 살펴보겠습니다. -

안에 - 정수 arr[] ={1, 1, 0, 1, 1, 0, 1}, 정수 기본 =7

아웃 - 전체 어레이를 강력하게 만들기 위한 최소 1초는 다음과 같습니다. 1

설명 - 우리는 크기가 7인 이진 배열과 7의 기본 값이 제공되며, 이는 처음 만나는 숫자 1이 전체 배열에 전력을 공급할 수 있음을 의미합니다. 따라서 arr[1]의 숫자 1은 배열의 다른 모든 요소에 전력을 공급할 수 있습니다.

안에 - 정수 arr[] ={1, 1, 0, 1, 1, 0, 1}, 정수 기본 =3

아웃 - 전체 어레이를 강력하게 만들기 위한 최소 1초는 다음과 같습니다. 2

설명 - 크기가 7인 이진 배열과 base 값이 2로 주어졌을 때 처음 만나는 숫자 1이 배열의 다음 두 요소에 전력을 공급할 수 있음을 의미합니다. 따라서 arr[2]의 숫자 1은 배열의 다음 두 요소에 전력을 공급할 수 있고 arr[5]의 다른 숫자는 배열의 다음 두 요소에 전력을 공급하여 전체 배열을 강력하게 만들 수 있습니다.

안에 - 정수 arr[] ={1, 1, 0, 1, 1, 0, 1}, 정수 기본 =1

아웃 - 전체 어레이를 강력하게 만드는 것은 불가능합니다.

설명 - 우리는 크기가 7인 이진 배열과 1로 기본 값이 제공되며, 이는 처음 만나는 숫자 1이 배열의 다음 단일 요소에 전력을 제공할 수 있음을 의미합니다. 따라서 전체 어레이를 강력하게 만드는 것은 불가능합니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다 -

  • 주어진 크기의 이진 배열과 정수 변수를 입력합니다. 예를 들어 base

  • 배열의 크기를 계산하고 변수를 선언합니다. 예를 들어 정수 유형의 val

  • 강력한 배열을 생성하는 데 필요한 최소 1을 반환하는 함수에 대한 호출과 함께 val을 설정하고 이것이 가능하지 않은 경우 오류 메시지를 추가로 표시하는 -1을 반환합니다.

  • 함수 Lend_Power(int arr[], int size, int base)

    내부
    • 바이너리 배열 크기의 정수형 값의 배열을 선언합니다.

    • 임시 변수를 temp로 선언하고 -1로 설정하고 count하고 0으로 설정합니다.

    • 배열의 크기까지 i에서 0까지 루프 FOR를 시작합니다. 루프 내에서 IF 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<<"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