思路拆解:
1、因为测评用例中未给输入的相关变量,所以我在输入时直接for循环到了30.
2、设置一个score数组来存放每一步跳一跳的分数,然后最后遍历求score的和就可以。
3、设置一个数组arr存放给出的测试用例每步的结果,是0,1或者2,遍历数组,当初始为2时即跳到了中心,设置num=1;代表这是第一次跳到中心,后续连续跳到中心,num++,如果是跳上去但没跳到中心的情况score[i]=1就可以,一直遍历,当遍历到0时跳出循环。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int arr[31];//表示输入的跳一跳数据
int score[31];//表示每一步所得的分数
int main(){
for(int i=1;i<=30;i++){
cin>>arr[i];
}
//判断每一步所得分数
int num=0;//出现跳到中心的次数
for(int i=1;i<=30;i++){
if(arr[i]==1){
score[i]=1;
}
if((arr[i]==2&&i==1)||(arr[i]==2&&arr[i-1]==1)){
score[i]=2;
num=1;
}
if(arr[i]==2&&arr[i-1]==2){
score[i]=2+2*num;
num++;
}
if(arr[i]==0){
goto out;
}
}
out:;
//输出积分总和
int sum=0;
for(int i=1;i<=30;i++){
if(score[i]!=0){
sum=sum+score[i];
}
else{
goto out1;
}
}
out1:;
cout<<sum;
}