猫猫的幸福生活(思维题)

 

 

下面这个是我写的代码:

很直接的思维,循环后判断相应位置的数字,并用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;
}

猜你喜欢

转载自blog.csdn.net/qq_59414507/article/details/121870578
今日推荐