下面这个是我写的代码:
很直接的思维,循环后判断相应位置的数字,并用t来记录,t满足条件就加1。
对特殊情况单独讨论
#include<stdio.h>
#include<string.h>
int a[205];
int main()
{
int T,n,i,cnt,t; //t表示状态
scanf("%d",&T);
while(T--)
{
memset(a,0,sizeof(a));
cnt=0; t=0;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=0;i<n;i++)
{
if(a[i]==0) {t++;}
else
{
if(t>=2) cnt+=t;
t=0;
}
}
if(t&&n>2&&a[n-2]!=1) cnt+=t;
if(a[1]==1&&a[0]==0) cnt++;
if(a[n-2]==1&&a[n-1]==0) cnt++;
if(n==1&&a[0]==0) cnt++;
printf("%d\n",cnt);
}
return 0;
}
下面这个是参考答案:
思维方式更胜一筹,减少了部分特殊情况的讨论
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int a[110];
int main()
{
int t;cin>>t;
while(t--)
{
int n;cin>>n;
int cnt=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
if(a[1]==0) cnt++;
for(int i=2;i<n;i++)
{
if((a[i-1]!=1||a[i+1]!=1)&&a[i]==0) cnt++;
}
if(a[n]==0&&n>1) cnt++;
cout<<cnt<<endl;
}
return 0;
}