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

C++에서 연속 2 없이 1과 2를 사용하여 점수에 도달하는 방법 계산

<시간/>

런 점수가 주어집니다. 목표는 타자가 하나의 공에서 1점 또는 2점을 득점할 수 있는 방식으로 그 점수에 도달하는 것입니다. 제한 사항은 2회 연속으로 실행할 수 없다는 것입니다. 예를 들어, 주어진 점수 6에 도달하기 위해 1+2+1+2와 같은 런을 할 수 있지만 2+2+1+1이 아닌 2개의 연속적인 2가 있는 다른 방식으로 실행할 수 있습니다.

입력

score=4

출력

Count of ways to reach a score using 1 and 2 with no consecutive 2s are: 4

설명

The ways in which we can reach the score 4 in following ways:
1+1+1+1, 1+1+2, 1+2+1, 2+1+1

입력

score=5

출력

Count of ways to reach a score using 1 and 2 with no consecutive 2s are: 6

설명

The ways in which we can reach the score 6 in following ways:
1+1+1+1+1, 2+1+1+1, 1+2+1+1 , 1+1+2+1, 1+1+1+2, 2+1+2

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

이 접근 방식에서는 플래그를 사용하여 이전 점수가 2인지 아닌지를 표시합니다. 2인 경우 다음 실행에서 점수를 1로 처리하고 그렇지 않으면 2로 처리합니다.

  • 정수 변수 점수를 가져옵니다.

  • 초기에 플래그 변수 검사 =false를 취합니다.

  • way_reach_score(int score, bool check) 함수는 연속 2 없이 1과 2를 사용하여 점수에 도달하는 방법의 수를 알려줍니다.

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

  • 점수가 0이면 0을 반환합니다.

  • 검사가 false이면 이전 실행이 1임을 의미하므로 현재 점수가 더 큰 경우 way는 count =ways_reach_score(score - 1, false) +ways_reach_score(score - 2, true)가 됩니다.

  • 그렇지 않으면 이전 실행이 2였으므로 결과 실행은 1만 되므로 way는ways_reach_score(score - 1, false)가 됩니다.

  • 결국 우리는 총계를 얻게 될 것입니다.

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

예시

#include <bits/stdc++.h>
using namespace std;
int ways_reach_score(int score, bool check){
   int count = 0;
   if (score == 0){
      return 1;
   }
   if (check == false && score > 1){
      count += ways_reach_score(score − 1, false) + ways_reach_score(score − 2, true);
   } else {
      count += ways_reach_score(score − 1, false);
   }
   return count;
}
int main(){
   int score = 4;
   bool check = false;
   cout<<"Count of ways to reach a score using 1 and 2 with no consecutive 2s are: "<<ways_reach_score(score, check);
   return 0;
}

출력

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

Count of ways to reach a score using 1 and 2 with no consecutive 2s are: 4