Нахождение x, где x xor a является минимальным, и x должен содержать те же биты, что и b - PullRequest
0 голосов
/ 28 сентября 2019

Например, если a = 3 и b = 3, то минимально возможное значение x равно 7, так как 3 ^ 7 = 4, а у семи установлен 3 бит

#include <iostream>
using namespace std;
int setb1(int x,int y)
{
    int coun=0;
    while (x)
    {
        coun+=(x&1);
        x=x>>1;
    }

    if (coun==y)
    {

        return 1;

    }
    else
    {


        return 0;
    }


}

int main()
{
    int n=2;
    int v=15;
    int z=0;
    int ans;
    int k=INT_MAX;
    int val;
    for (int i=0;i<n;i++)
    {
        z+=1<<i;
    }

    int l=setb1(z,n);

    while(setb1(z,n))
    {
    ans=v^z;
    if (ans<k)
    {
        k=ans;
        val=z;
    }
        z=z<<1;
        cout<<"min"<<val<<endl;
    }


    return 0;
}

, который идет бесконечно, хотя min дает значениеправильный ответ .для a = 15 и b = 2 выход составляет 12

мин 3 мин 6 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 мин 12 .................

...