繁体   English   中英

C++ 多个嵌套的 If-else 语句有效,但组合起来无效

[英]C++ multiple nested If-else statements work but combined doesn't

我是 c++ 的新手。 我尝试了一个与位集相关的问题( https://www.codechef.com/problems/CHEFQUE ),当我使用以下嵌套语句时,代码通过了所有测试

    for(int i=1;i<Q+1;i++){
        temp = S/2;
        if(S&1){ //odd
            if(!sets[temp]){
                sets[temp] = true;
                sum+=temp;
            }
        }
        else{    //even
            if(sets[temp]){
                sets[temp] = false;
                sum-=temp;
            }
        }
        S = (A*S + B);

但是当我结合多个 if-else 语句时,它在某些测试中失败了

    for(int i=1;i<Q+1;i++){
        temp = S/2;
        if(S&1 && !sets[temp]){ //odd and empty
            sets[temp] = true;
            sum+=temp;
        }
        else if(!S&1 && sets[temp]){    //even ond occupied
            sets[temp] = false;
            sum-=temp;
        }
        S = (A*S + B);
    }

我真的不知道为什么会发生这种情况,我敢肯定这一定很愚蠢。 如果有人提供帮助,我将不胜感激。

这张表中可以看出,运算符! 具有比&更高的优先级(按位与,而不是地址),因此您的代码应如下所示:

    for(int i=1;i<Q+1;i++){
    temp = S/2;
    if(S&1 && !sets[temp]){ //odd and empty
        sets[temp] = true;
        sum+=temp;
    }
    else if(!(S&1) && sets[temp]){    //even ond occupied
        sets[temp] = false;
        sum-=temp;
    }
    S = (A*S + B);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM