Берем третьи байты и переводим в двоичную систему счисления:добавим в начале нулей, чтобы получилось 8 цифр. ← ← найдем маску. запишем с столбик. если элементы одинаковые, ставим соответствующее число, если элементы разные, ставим крестик: 00000101 00011101 000xx101 ← маска т.к. по правилу в маске, сначала идут единицы, переместим их в начало: 11xx0000 если бы по условию, надо было бы найти наименьшее возможное значение, то мы бы заменяли крестики(х) на нули. т.к. по условию необходимо наибольшее возможное значение, подставляем вместо крестиков(x), единицу и переведем в десятичную систему счисления:
ответ:Из 4 чисел получается 6 сочетаний по 2 без повторений. Получаем эти суммы и Далее простым сравнением получаем максимальную сумму.
Объяснение:
int _tmain(int argc, _TCHAR* argv[])
{
int a, b, c, d;
int ab, ac, ad, bc, bd, cd;
int tmp;
char* m[6] = { "a + b", "a + c", "a + d", "b + c", "b + d", "c + d" } ;
char *ch;
cout << "Input a b c d " << endl;;
cin >> a >> b >> c >> d;
ab = a + b;
ac = a + c;
ad = a + d;
bc = b + c;
bd = b + d;
cd = c + d;
if (ab > ac)
{
tmp = ab; ch = m[0];
}
else
{
tmp = ac; ch = m[1];
}
if (tmp < ad)
{
tmp = ad; ch = m[2];
}
if (tmp < bc)
{
tmp = bc; ch = m[3];
}
if (tmp < bd)
{
tmp = bd; ch = m[4];
}
if (tmp < cd)
{
tmp = cd; ch = m[5];
}
cout << " max sum = " << ch <<" = " << tmp << endl;
return 0;
}