二进制异或
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;
}
转载于//www.cnblogs.com/Aiahtwo/p/11385018.html
还没有评论,来说两句吧...