C++多个嵌套的If-else语句可以使用,但组合起来就不行了。

问题描述 投票:0回答:1

我是一个c++的新手。我尝试了一个与bitsets(https:/www.codechef.comproblemsCHEFQUE),当我使用下面的嵌套语句时,代码通过了所有的测试。

    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);
    }

我真的不知道为什么会出现这种情况,我相信一定是非常愚蠢的。如果有人能帮助我,我真的很感谢。

c++11 if-statement c++14 c++17
1个回答
1
投票

正如你可以看到的 本表 经营者 ! 优先于 & (Bitwise and, not address of),所以你的代码应该是这样的。

    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);
}
© www.soinside.com 2019 - 2024. All rights reserved.