计算距离,给定两个数,将其表示为二进制形式,则他们之间的Ham名距离定义为他们不同的位置书。例如 两个数的Ham名距离 010010  
              100010
是2 ,因为他们最左边两维不同,其余各位相同。
#include
#include
#include
#include

using namespace std;

int compute1(int N)
{
  bitset<32>bit(N^(N-1));
  return bit.count();
}
map input(mapstore)
{
  //mapstore;
     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(mapstore )
{
  map::iterator it=store.begin();
  while(it!=store.end())
  {
    cout<second)<    ++it;
  }
}
void outputmutimap(multimap store)
{
  typedef multimap::iterator itstore;
  itstore it1=store.begin();
  pairpos;
  while(it1!=store.end())
  {
    pos=store.equal_range(it1->first);
    while(pos.first!=pos.second)
    {
      cout<second<<"    "<second)<      ++pos.first;
    }
    it1=pos.first;
      
  }
}
multimap inputmultimap(multimapstore)
{
  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(){
//  mapmp;

  //output(input(mp));

        multimapmp1;
          outputmutimap(inputmultimap(mp1));
  return 0;
}