Задать вопрос
vs_convoy
@vs_convoy

Как найти из 4 чисел, где 3 равные между собой одно не равное, за один раз?

Подскажите как с использованием минимального количества условных операторов найти из 4 чисел, одно не равное, если остальные 3 равны между собой.
Только без циклов и массивов, только условные операторы.
Мне говорили, что это связано с задачей о трех монетках, якобы такой же алгоритм.
  • Вопрос задан
  • 733 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
@deliro
В 4-ех равных числах нет одного не равного.
0 операторов сравнения. Я молодец?
Ответ написан
Mrrl
@Mrrl
Заводчик кардиганов
Надо уточнить - что считать, операции сравнения, или условные операторы. Считать написанные операции/операторы, или выполняющиеся.
Возможные варианты решения:
return a==b ? (a==c ? d : c) : (a==c ? b : a);
int X[4];
return X[(X[0]==X[2])+2*(X[0]==X[1])];

int f(int p,int q,int r){
  return p==r ? q : p;
}
int g(int a,int b,int c,int d){
  return a==b ? f(c,d,a) : f(a,b,c);
}

int x=a^b,y=a^c;
x=(x|-x)>>31; y=(y|-y)>>31;
return ((a^b^c^d)&x&y)^((b^d)&x)^((c^d)&y)^d;

(в последнем вообще нет сравнений и условных операторов).
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Без явных условий, но с плавающей арифметикой, посему неточно:
sqrt(pow(x1+x2-x3-x4))
С одним условием при положительных числах:
x = x1+x2-x3-x4;
if (0 > x) x = -x;
Ответ написан
Комментировать
Apathetic
@Apathetic
Frontend
Я только за два сравнения смог придумать. За одно не представляю, как =)
https://jsfiddle.net/mjdtfbkq/1/
Ответ написан
Комментировать
swanrnd
@swanrnd
Издатель HTML5 игр
JavaScript:
a1=3; a2=2; a3=3; a4=3;
a1*!(2*a2-a3-a4)+a2*!(2*a3-a4-a1)+a3*!(2*a4-a1-a2)+a4*!(2*a1-a2-a3)


0 условных.
Ответ написан
Комментировать
uvelichitel
@uvelichitel
habrahabr.ru/users/uvelichitel
Сравнить любые два, это сравнение при любом исходе даст вам пару заведомо 'хороших' и пару с фальшивкой. Вторым сравнением нужно сравнивать заведомо хорошее с любым из пары с фальшивкой. Это даст ответ. Два сравнения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы