码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-05-16 00:57:19      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:font   main   题目   include   ++   i++   进制   笔试   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",&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("\n");
 }
 */
 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\n",max);
 return 0;
}

技术图片技术图片

技术图片技术图片

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

标签:font   main   题目   include   ++   i++   进制   笔试   com   

原文地址:https://www.cnblogs.com/sbb-first-blog/p/12897766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!