题解 | 子段和

子段和

https://www.nowcoder.com/practice/ee0a9c6366e240f2bbea0ff8594e405e

#include<stdio.h>
int main()
{
    int n,flag=1,count=0;
    scanf("%d",&n);
    long long a;
    int value[n];
    for(int i=0;i<n;i++){
        scanf("%lld",&a);
        if(a==0)
        {
            flag=0;
            break;
        }
        if(flag){ 
            int t=1;
            for(int j=0;j<count;j++){
                if(a==value[j]){
                    t=0;break;
                }
            }
            if(t&&count<3){
                value[count++]=a;
            }
        }
    }
    if(!flag){
        printf("NO");
    }
    else if(count==3||count==1){
        printf("YES");
    }
    else if(count==2){
        if(value[0]+value[1]==0){
            printf("NO");
        }
        else {
        printf("YES");
        }
    }
    return 0;
}

看出现了几个数据(不重复的),出现一次(不为零)和3次及其以上的或者出现两次不互为相反数的那么就输出YES,出现两次相加和为0或者出现一次为零,那么输出NO.

全部评论

相关推荐

04-21 16:05
已编辑
山西大学 Java
不吃压力👿:我和你简历差不多,好多看到28就不回复了,回复的基本是全栈或低代码
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务