回 帖 发 新 帖 刷新版面

主题:第66次编程比赛

[size=3]问题题目:最大的异或

[color=0000FF]题目描述:[/color]
给你n个正整数,你要找出哪两个数按位异或运算后的结果是最大的

[color=0000FF]输入:[/color]
输入一个整数n(2<=n<=100000),然后就是n个1e9以内的正整数

[color=0000FF]输出:[/color]
输出最大的按位异或运算结果

[color=0000FF]样例输入:[/color]
4
1 3 4 7

[color=0000FF]样例输出:[/color]
7

[color=0000FF]提示:[/color]
3和4的异或的结果是7,已经最大

参加比赛者直接回复本帖子即可,回复帖子不可见
结束时间:6月2日[/size]

回复列表 (共27个回复)

11 楼

内容隐藏,本帖结帖后才能浏览。

12 楼


内容隐藏,本帖结帖后才能浏览。

13 楼

#include <iostream>
#include <string>
#include <time.h>

using namespace std;

int MaxXOR(int Data[], int len);

int main()
{
    int Data[4] = {1, 3, 4, 7};
    int max = MaxXOR(Data, 4);
    
    cout << max << endl;
    
    getchar();
    return 0;
}

int MaxXOR(int Data[], int len)
{
    int max = 0;
    int result;
    
    for (int i=0; i<len-1; i++)
    {
        for (int j=i+1; j<len; j++)
        {
            result = Data[i] ^ Data[j];
            if (max < result)
            {
                max = result; 
            }
        }
    }
    return max;
}

14 楼


#include <iostream>
#include <conio.h>
#include <vector>
#include <fstream>
using namespace std;
void main()
{
    vector <int> Xor;
    vector <int>::iterator it,is;
    int a;
    int i=0;
    int c;
    int max=0;
    int d;
    cout<<"请输入要进行最大的异或比较的数值的个数"<<endl;
    cin>>a;
    cout<<"请输入要进行最大异或比较的数值"<<endl;
    while(i<a)
    {
        cin>>c;
    while(cin.fail())
        {
            cout<<"你输入了不正确的数值"<<endl;
            cin.clear();
            cin.sync();
            cin>>c;
        }
        if(c<1e9&&c>0)
        {
            Xor.push_back(c);
            ++i;
            
        }
        else
            continue;
    }
    
    it= Xor.begin();
    for(;it!=Xor.end();++it)
    {
        for(is=it+1;is!=Xor.end();++is)
        {    
            d=*it^*is;
            if(max<d)
                max=d;
        }
    }
    cout<<"已经找到了最大异或值"<<endl;
    cout<<max;
    getch();
}


15 楼

16 楼

#include <stdio.h>
#include <stdlib.h>

int main()
{
  /*变量定义*/
  int n=0;                /*定义参与运算的变量的个数*/
  int *p=NULL;            /*定义指向存储参与运算数据区域的指针*/
  int xor_result=0;       /*定义每次异或运算结果存放变量*/
  int max=0;              /*定义当前异或运算结果最大值存放变量*/
  int i=0,j=0;            /*定义循环变量*/

  printf("Please enter the number of the datas:\n");
  scanf("%d",&n);         /*输入参与运算的变量的个数*/

  p=(int *)(calloc((unsigned)(n),sizeof(int)));  /*为参与运算的变量分配存储空间*/

  printf("Please enter %d integer datas to calculate,\n",n);
  printf("press ENTER after you enter a data.\n");
  for(i=0;i<n;i++)        /*参与运算的变量的输入*/
    scanf("%d",p+i);

  for(i=0;i<n-1;i++)      
    for(j=i+1;j<n;j++)
    {
      xor_result=p[i]^p[j]; /*对每个数据与它之后的每个数据进行按位异或运算,每次运算结果存入xor_result*/
      if(xor_result>max)   /*若按位异或运算结果大于当前异或结果最大值,则该运算结果存入max变量*/
        max=xor_result;     /*继续向下运算,只道每个数据均与其他数据进行过异或运算为止*/
    }
  printf("the max xor_result is %d.\n",max); /*输出异或运算结果最大值*/

  free((void *)(p));                 /*释放存储空间*/

  return 0;                /*返回操作系统*/
}

17 楼

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
main()
{
    int num,k,i,j,m[20],x,y,max=0;
    printf("input the num:\n");
    scanf("%d",&num);
    for(k=0;k<num;k++)
    {
        printf("please input the %d number:\n",k);
        scanf("%d",&m[k]);
    }
    for(i=0;i<num-1;i++)
    {
        for(j=i+1;j<num;j++)
        {
            k=m[i]^m[j];
            if(k>max)  
            {
                max=k;
                x=i;
                y=j;
            }
        }
    }
    printf("it is %d^%d=%d",m[x],m[y],max);
    getch();
}


18 楼


#include <stdio.h>
#include <string.h>
#include <memory.h>
#include <stdlib.h>
const long N = 3500000;
long n,ans;
long next[N][2],data[N],tot;
bool isok[N];
long a[N];
long tmp[35];
void Check(long nn)
{
    long tp=nn,i=0,j,k;
    memset(tmp,0,sizeof(tmp));
    while(tp)
    {
        tmp[i]=tp&1;
        tp>>=1;
        i++;
    }
//    for(i=0;i<34;i++)printf("%ld",tmp[i]);printf("\n");
    i=0,j=34;
    while(!isok[i])
    {
    //    printf("%ld %ld %ld J-Next\n",tmp[j],next[i][0],next[i][1]);
        if(tmp[j]==0)
        {
            if(next[i][1])i=next[i][1];
            else i=next[i][0];
        }
        else
        {
            if(next[i][0])i=next[i][0];
            else i=next[i][1];
        }
        j--;
    }
//    printf("%ld - %ld N\n",data[i],nn);
    if((data[i]^nn)>ans)ans=(data[i]^nn);
    //printf("%ld\n",ans);
}

inline void Insert(long nn)
{
    long tp=nn,i=0,j,k;
    memset(tmp,0,sizeof(tmp));
    while(tp)
    {
        tmp[i]=tp&1;
        tp>>=1;
        i++;
    }
//    for(i=0;i<34;i++)printf("%ld",tmp[i]);printf("\n");
    i=0,j=34;
    for(;next[i][tmp[j]]&&!(isok[next[i][tmp[j]]])&&j;)
    {
        i=next[i][tmp[j]];j--;
    }
    if(isok[next[i][tmp[j]]])return;
    for(;j>=0;j--)
    {
        next[i][tmp[j]]=++tot;
        i=tot;
    }
    isok[i]=1;
    data[i]=nn;
}
int main()
{
    long i,j,k,t1,t2,tans;
    while(scanf("%ld",&n)!=EOF)
    {
        tot=0;
        memset(isok,0,sizeof(isok));
        memset(next,0,sizeof(next));
        tans = ans = 0;
        for(i=0;i<n;i++)
        {
            scanf("%ld",&t1);
        //    t2=rand()%30000;
        //    t1=rand()%30000;
        //    t1*=t2;
        //    a[i]=t1;
            
        //    printf("%ld\n",t1);
        //    for(j=0;j<i;j++)
        //    {
            //    printf("%ld - %ld : %ld\n",i,j,a[j]^a[i]);
        //        if((a[j]^a[i])>tans)tans = (a[j]^a[i]);
        //    }
            if(i)Check(t1);
            Insert(t1);
        //    printf("t%ld\n",ans);
        //    printf("t%ld\n",tans);
        }
        printf("%ld\n",ans);
        //printf("%ld\n",tans);
    }
    return 0;
}

19 楼

#include <iostream>
#include <stdio.h>
using namespace std;
long a[100000];
int main()
{
    long n,x1,x2,result;
    int i,j;
    cin>>n;
    while(!(n<2 || n>100000))
    {    x1=x2=result=i=0;
        while(i<n)cin>>a[i++];
        for(i=0;i<n-1;i++)
            for(j=i+1;j<n;j++)
            {
                if((a[i] | a[j])>result)
                {
                    result=a[i] | a[j];
                    x1=a[i];
                    x2=a[j];
                }
            }
        cout<<result<<endl;
        cin>>n;
    }
    
    return 0;
}

20 楼

hao

我来回复

您尚未登录,请登录后再回复。点此登录或注册