先写一下感受吧,做这道题我的思路是要处理三种情况,一种是位于开头的0,一种是位于中间的0
另一种是位于末尾的0,对于中间的0我还得进行分情况,然后就在这个地方由于自己的思考不当,
一直出bug,所以耗时很多。看了y总的代码我真的感觉豁然开朗啊,真的好简便啊,
我编程之所以不好就是因为不会将问题进行转化,还是做题做少了,继续努力吧!!!
y总代码:
#include<iostream>
using namespace std;
const int N=110;
int a[N];
int main(){
int n;
cin>>n;
while(n--){
int m;
cin>>m;
int res=0;
for(int i=0;i<m;i++){
cin>>a[i];
}
for(int i=1;i<m-1;i++){
if(a[i]==0&&a[i-1]==1&&a[i+1]==1){
a[i]=2;
}
}
for(int i=0;i<m;i++){
if(a[i]){
res++;
}
}
cout<<res<<endl;
}
return 0;
}
自己的代码:
#include<iostream>
using namespace std;
const int N=110;
int a[N];
int main(){
int n;
cin>>n;
int m,t,c,y;
int flag;
while(n--){
cin>>m;
c=0;
t=0;
y=0;
for(int i=0;i<m;i++)
cin>>a[i];
for(int i=0;i<m;i++){
t=c;
while(a[i]==0&&i<m){
if(i==0){
flag=1;
}
if(!flag){
if(t==c||t==c+1){
t++;
}
if(t-c>=2){
y=1;
}
if(i==m-1){
t=c;
y=0;
break;
}
}
i++;
}
if(y==1){
t-=2;
}
y=0;
c=t;
flag=0;
if(i<m&&a[i]==1){
c++;
t++;
}
}
cout<<c<<endl;
}
return 0;
}