計算距離

計算距離,給定兩個數,將其表示爲二進制形式,則他們之間的Ham名距離定義爲他們不同的位置書。例如 兩個數的Ham名距離 010010  
              100010
是2 ,因爲他們最左邊兩維不同,其餘各位相同。
#include<iostream>
#include<map>
#include<bitset>
#include<cmath>

using namespace std;

int compute1(int N)
{
  bitset<32>bit(N^(N-1));
  return bit.count();
}
map<int,int> input(map<int,int>store)
{
  //map<int,int>store;
     int M,N;
     int sum=0;
     cout<<"please input your data M N ";
     while(cin>>M>>N)
     {
        if( (pow(2,M)-1)>=N)
        store.insert(make_pair(M,N));
        else cout<<"輸入不合法";
        cin.clear();
        fflush(stdin);

        
     }
     return store;
    

}
int sum_(int N)
{
  int sum1=0;
  while((N^(N-1))>=0)
  {
    sum1+=compute1(N);
    --N;
  }
  return sum1;

  
}
void output(map<int,int>store )
{
  map<int,int>::iterator it=store.begin();
  while(it!=store.end())
  {
    cout<<sum_(it->second)<<endl;
    ++it;
  }
}
void outputmutimap(multimap<int,int> store)
{
  typedef multimap<int,int>::iterator itstore;
  itstore it1=store.begin();
  pair<itstore,itstore>pos;
  while(it1!=store.end())
  {
    pos=store.equal_range(it1->first);
    while(pos.first!=pos.second)
    {
      cout<<pos.first->second<<"    "<<sum_(pos.first->second)<<endl;
      ++pos.first;
    }
    it1=pos.first;
      
  }
}
multimap<int,int> inputmultimap(multimap<int,int>store)
{
  int M,N;
  cout<<"請輸入M,N";
  while (cin>>M>>N)
  {         if( (pow(2,M)-1)>=N)
    store.insert(make_pair(M,N));
  
        else cout<<"輸入不合法";
        cin.clear();
        fflush(stdin);


  }
  return store;

}
int main(){
//  map<int,int>mp;

  //output(input(mp));

        multimap<int,int>mp1;
          outputmutimap(inputmultimap(mp1));
  return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章