计算在C ++中使用1和2而不连续2来得分的方法

给定分数。目标是使击球手仅在一个球中可以跑1或2步来达到该分数。限制是不能连续进行2次运行。例如,要达到给定的分数6,可以进行类似1 + 2 + 1 + 2的奔跑,但不能进行2 + 2 + 1 + 1的奔跑,也可以采用任何其他方式使用连续两个2。

例如

输入值

score=4
输出结果
没有连续2的情况下,使用1和2得分的方法有: 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
输出结果
没有连续2的情况下,使用1和2得分的方法有: 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。

  • 取一个整数变量分数。

  • 最初使用标志变量check = false。

  • 功能 ways_reach_score(int score, bool check) 告诉您使用1和2(不连续2秒)达到分数的方法数量。

  • 将初始计数设为0。

  • 如果分数为0,则返回0。

  • 如果检查结果为假,则表示之前的跑步次数为1,因此如果当前得分更高,则将计算路数= Ways_reach_score(score − 1,false)+ Ways_reach_score(score − 2,true)。

  • 否则,前一次运行为2,因此后续运行将仅为1,因此wayways将为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<<"没有连续2的情况下,使用1和2得分的方法有: "<<ways_reach_score(score, check);
   return 0;
}
输出结果

如果我们运行上面的代码,它将生成以下输出-

没有连续2的情况下,使用1和2得分的方法有: 4

猜你喜欢