给定分数。目标是使击球手仅在一个球中可以跑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