#include<stdio.h>
int eorsum(int *shu,int n){
int i,j,ans;
int sum=0;
for(i=0;i<(1<<n);i++) //总共有(1<<n)个子集,i对应的十进制1代表该位置的数存在 ;
{
ans=0; //初始化 i^0=i;
for(j=0;j<n;j++)
{
if(i&(1<<j)) //i的十进制情况下由低位到高位与1位与及判断是否为1及该位数是否存在,为1则进行该位置的数字的异或 ;
{
ans^=shu[j];
}
}
sum+=ans;
}
return sum;
}
int main()
{
int shu[100],n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&shu[i]);
}
printf("%d",eorsum(shu,n));
return 0;
}
(自用) 异或求和
最新推荐文章于 2024-07-25 16:35:35 发布