1102 海明距離
阿新 • • 發佈:2018-12-11
海明距離
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; }