1. 程式人生 > >1102 海明距離

1102 海明距離

海明距離

1、題目內容

Description 海明距離是在指二進位制情況下,一個整數變成另外一個整數需要翻轉的位數。比如2轉換到3需要翻轉1位,所以2到3的海明距離是1。給你兩個正整數x和y,(x,y<=1,000,000,000)求它們的海明距離。 輸入 第一行是一個整數N,表示樣例的個數。以後每行兩個整數x和y。 輸出 每行輸出一個整數,及對應樣例的結果。

Sample Input 2 1 2 4 7

Sample Output 2 2

2、解題分析

這個題目以二進位制的知識考察迴圈結構,我的方法是:首先用陣列分別將x和y轉化為二進位制儲存起來。再從高位到低位去依次對兩數的二進位制每一位進行判斷,不同的話說明就需要翻轉。

3、參考程式碼

#include<stdio.h>
int main()
{
	int k; //樣例的個數 
	scanf("%d",&k);
	while(k--)
	{
		int count=0; //用於記錄海明距離,即需要翻轉的位數 
		int x,y;
		scanf("%d %d",&x,&y);
		int m,n; 
		int a[33]={0},b[33]={0};
		m=0;   //將x轉化為二進位制儲存到a陣列中,m表示的就是a陣列大小 
		while(x)
		{
			a[m]=x%2;
			x/=2;
			m++;
		}
		n=0;   //將y轉化為二進位制儲存到b陣列中,n表示的就是b陣列的大小 
		while(y)
		{
			b[n]=y%2;
			y/=2;
			n++;
		}
		if(n>m) m=n;  //兩個陣列的大小可能不同,所以我們要從最大的數位依次比較 
		for(int i=0;i<m;i++) 
		{
			if(a[i]!=b[i]) count++; //數位不同則海明距離就加一 
		}
		printf("%d\n",count);
	}
	return 0;
}

大可愛是我心裡最重要的~

在這裡插入圖片描述