这道题的核心,是要找到对于“0”、“1”、“2”三种不同情况,其所对应的得分规律。
卡在了”2“上。起初没有加num标志位,参考了大神的代码后得到了启发:
当前一位数字为1时,令num=1;当前一位数字为2时,令num自增1,当前得分值加上num的两倍即可。
勤思考,注意思路!
#include<cstdio>
const int N=30+10;
int a[N];
int main()
{
int n;
for(int i=0;i<30;i++)
{
scanf("%d",&a[i]);
if(a[i]==0)
{
n=i;
break;
}
}
int ans=0;
int num;//flag
for(int i=0;i<n;i++)
{
switch(a[i])
{
case 0:
break;
case 1:
ans++;
break;
case 2:
if(a[i-1]==1 || i==0)
{
ans+=2;
num = 1;//flag
}
if(a[i-1]==2)
{
// ans+=2+a[i];//?
ans+=2*(++num);
}
break;
default:
break;
}
}
printf("%d\n",ans);
return 0;
}