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

C++에서 연속 0의 쌍 세기

<시간/>

1로 시작하는 시퀀스 생성기가 있습니다. 각 단계에서 0은 10이 되고 1은 01이 됩니다. 따라서 다음 변경이 연속 단계에서 발생합니다 -

1단계 − 01

2단계 − 1001

3단계 − 01101001 ……

목표는 주어진 단계 수에 대해 연속적인 0 쌍의 수를 찾는 것입니다.

입력 스텝이 0-0의 1쌍이면 입력 스텝은 0-1의 2쌍, 입력 스텝은 0의 1의 3쌍

4단계 − 1001011001101001

5단계 − 01101001100101101001011001101001

시퀀스가 2의 거듭제곱으로 증가하고 길이 12 이후 및 12자마다 반복되는 것을 관찰할 수 있습니다. 따라서 이 12개의 길이 시퀀스에는 2쌍의 연속적인 0이 있습니다.

S 단계의 경우 12개의 길이 패턴 수는 2S /12입니다.

연속된 2 패턴의 수 =1(초기) + 2 X S(나머지 12길이 반복)

예를 들어 이해합시다.

입력 - 단계 =5

출력 − 연속 0 쌍의 수는 − 5입니다.

설명 − 위의 5단계 시퀀스는 다음과 같습니다. -

Step 5: 01101001100101101001011001101001
Number of pairs of 0’s is 5.
Also with formula : tmp=25
/12= 32/12 = 2, pairs=1+ 2 x 2 = 5

입력 - 단계 =10

출력 − 연속 0 쌍의 수는 − 171입니다.

설명 − 공식 사용 시 − tmp=210/12=1024/12 =85, 쌍=1+ 2 x 85 =171

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

단계 수를 입력으로 취하고 단계=1이면 연속적인 0 쌍의 수가 0인지 확인합니다. 단계=2 또는 3이면 그러한 쌍의 수는 1입니다.

그렇지 않으면 공식 tmp=2input/12 및 pair=1+2*tmp를 사용하여 계산합니다.

  • 단계에 대한 입력으로 가변 십진수를 사용합니다.

  • Zero_pairs(int decimal) 함수는 10진수를 취하고 해당 단계에 대한 연속 0 쌍의 수를 반환합니다.

  • 초기 카운트를 0으로 합니다.

  • 10진수<=1이면 0을 반환합니다.

  • 10진수==2 또는 10진수==3인 경우. 그런 다음 1을 반환합니다.

  • 그렇지 않으면 temp=(pow(2,decimal))/12를 계산하고 count를 2*temp + 1로 계산합니다.

  • 결과로 카운트를 반환합니다.

예시

#include<bits/stdc++.h>
using namespace std;
int Zero_pairs(int decimal){
   int count = 0;
   if(decimal <=1){
      count = 0;
   }
   else if(decimal == 2 || decimal == 3){
      count = 1;
   }
   else{
      int temp = (pow(2, decimal) / 12);
      count = 2 * temp + 1;
   }
   return count;
}
int main(){
   int decimal = 7;
   cout<<"Count of Pairs Of Consecutive Zeros are: "<<Zero_pairs(decimal);
   return 0;
}

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

Count of Pairs Of Consecutive Zeros are: 21