当前位置 : 主页 > 网页制作 > HTTP/TCP >

二进制异或

来源:互联网 收集:自由互联 发布时间:2021-06-16
https://blog.csdn.net/qq_35937273/article/details/82724247 我理解的代码: #includebits/stdc++.h int ans[ 32 ]; int n,m,maxn,num; // 当两个数相异或的时候,其最高位相同,则异或后的数就会比原有的数小 // 我

https://blog.csdn.net/qq_35937273/article/details/82724247

我理解的代码:

#include<bits/stdc++.h>
int ans[32];
int n,m,maxn,num;
//当两个数相异或的时候,其最高位相同,则异或后的数就会比原有的数小
//我们只需要找到每个数的最高位    然后找到拥有最多元素的那个最高位 
int main()
{
    cin>>n;
    while(n--){  //测试案例 
        cin>>m;   //数组元素个数 
        maxn=0;
        memset(ans,0,sizeof ans);
        for(int j=1;j<=m;j++){
            cin>>num;//数组元素 
            for(int i=30;i>=0;i--){   //遍历最高位位数i 
                if((1<<i)&num){  //此时i为num转化为二进制的最高位的位数 
                    ans[i]++; //ans[i]数组记录 最高位为i位有ans[i]个元素 
                    break;
                }
            }
        }
        for(int i=0;i<=30;i++)maxn=max(maxn,ans[i]);
        cout<<maxn<<endl;
    }
    return 0;
}
网友评论