美团笔试-第二题最大汉明距离:

Posted sbb-first-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了美团笔试-第二题最大汉明距离:相关的知识,希望对你有一定的参考价值。

题目描述

  给出n个数,求这n个数中两两最大的汉明距离,两个数的汉明距离定义维两个二进制表示中不同的位数。

  例如11和6的汉明距离为3,因为11转换为二进制后为1011,6转换为二进制后为0110,他们的二进制第1,3,4位(从低位开始数)不同

输入

  第一行一个数n,代表有n个数,接下来n个数,描述这n个数a1,a2,a3,..an;

1<=n<=100,1<=ai<=10000

输出

  一个数,最大的汉明距离

#include<stdio.h>
#define N 100
#define M 32
int TenToTwo(int a);
int main(void)
{
 int A[N][M]={0},a[N];          //A[N][M]存放二进制数
 int B[1000][32]={0};           //存放两两比较的汉明距离
 int i,j,k,n;
 int m=0;
 scanf("%d ",&n);
 for(i=0;i<n;i++)
 {
  scanf("%d",&a[i]);
 }
 
 for(i=0;i<n;i++)
 {
  j=0;
  while(a[i]>0)
  {
   A[i][j]=a[i]%2;
   a[i]=a[i]/2;
   j++;
   }
   m=j;  
 }
 {
  for(j=i+1;j<n;j++)
  {
   int h=0;
   for(k=0;k<m;k++)
   {
    if(A[i][k]!=A[j][k])
    {
     h++;
    }
   }
   B[i][j]=h;
  }
   
 }
 /*
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  {
   printf("%d ",B[i][j]);
  }
  printf(" ");
 }
 */
 int max=B[0][0];
 for(i=0;i<n;i++)
 {
  for(j=0;j<n;j++)
  {
   if(max<B[i][j])
   {
    max=B[i][j];
   }
  }
 }
 printf("%d ",max);
 return 0;
}

技术图片技术图片

技术图片技术图片

以上是关于美团笔试-第二题最大汉明距离:的主要内容,如果未能解决你的问题,请参考以下文章

461. 汉明距离

算法 - 计算汉明距离

汉明距离

汉明距离

汉明距离与汉明重量

461. 汉明距离