问题实际上意思是这样的:遇到1就加一分,不论是连续第几个1。遇到2的话就有规矩了,遇到第一次2就加两分,遇到连续的第二次加四分……以此类推。遇到0就结束。
因此创建数组接收输入的数,没有指定几个,但0肯定是末尾,所有设最大的结束标志是i=30,而后再键入数据是0时立即跳出循环。故序号0-i都是有数据的。
第二个循环用来遍历输入的数据,遇到0直接结束,遇到1加一分并将flag归为0,因为flag代表的就是这是第几个连续的2,一旦有了1,那么2的连续次数就归零。一旦遇到2先把flag+1,再在原先的基础上+flag倍的2。
#include <iostream>
using namespace std;
int main(){
int i,a[30]={0},sum=0,j=0,flag=0;
for(i=0;i<30;i++){
cin>>a[i];
if(a[i]==0){
break;
}
}
for(j=0;j<=i;j++){
if(a[j]==0){
break;
}else{
if(a[j]==1){
sum++;
flag=0;
}
if(a[j]==2){
flag++;
sum=sum+2*flag;
}
}
}
cout<<sum;
return 0;
}