Я хочу напечатать 1, если три входа отличаются друг от друга, или напечатать 0, если какой-то ввод повторяется более одного раза.
Это мой код:
int main() {
int a, b, c;
a = 11;
b = 22;
c = 11;
if (a==b && a==c)
printf("0");
else if (b==c)
printf("0");
else
printf("1");
if (a > b && a>c)
printf("1");
else if (b>a && b >c)
printf("1");
else if (c>a && c >b)
printf("1");
else
printf("0");
return 0;
}
В чем проблема
Найдите время, чтобы прочитать страницы помощи, особенно разделы с названиями "Какие темы я могу спросить здесь?" и «Какие типы вопросов мне следует избегать?». Также пожалуйста взять тур и читай о том, как задавать хорошие вопросы. Наконец, прочтите этот контрольный список вопросов.
Вы сказали нам, что хотите сделать, и показали свой код, хорошо. А каков твой вопрос?
прочтите о разнице между && и ||, а затем используйте соответственно.
Я хочу напечатать 1, если три входа отличаются друг от друга, или напечатать 0, если какой-то ввод повторяется более одного раза.
«Я хочу сделать X, если Y» - не вопрос





вы можете упростить свой код, чтобы он был
if (a==b || a==c || b==c)
printf("0");
else
printf("1");
Или даже: printf(a==b || a==c || b==c ? "0" : "1");
@arorias Или даже: printf("%c", '1' - (a==b || a==c || b==c)); ;-)
@Scheff Или даже: printf("%d", !(a==b || a==c || b==c));
@arorias Я не могу превзойти это (хотя я думал заменить реляционные операторы поразрядными, чтобы улучшить предварительная выборка кеша.) ;-)
Я бы сделал это так:
int different(int a, int b, int c)
{
return a != b && b != c && a != c;
}
Это вернет 1, если все три числа различны, иначе он вернет 0, что должно означать, что существует по крайней мере одна пара дубликатов.
Используйте это так:
printf("%d\n", different(11, 22, 11));
который напечатает:
0
пожалуйста, посмотрите изображение pasteboard.co/HC9xu3I.png
@PiyushBasak Да? Это не тот код ... Я не понимаю твою точку зрения.
Предлагаю (когда в настроении играющий)
printf("%d\n", !(!!(a - b) * !!(a - c) * !!(b - c)));
Действительно необычно, но уязвимо для переполнения int, в отличие от простых проверок ==, которые вы можете выполнить. Хотя это именно то, как вы бы сделали это на ассемблере. Проголосуйте.
@bathsheba: переполнение int на a - b? Да, это возможно. Операнды умножения всегда 0 или 1.
Да, a - b действительно уязвим, хотя мне действительно не нравится этот аспект языка. Но это отличное решение, так как оно не разветвляется.
можно было бы вместо умножения еще и xoring делать? (что было бы более очевидно: D)
@hellow: хммм, xor не заменяет мультипликацию: 1*0*0 != 1^0^0
Верно. Как я это придумал? :(
Не могли бы вы уточнить, почему вы нам это рассказываете? Вы даже не задаете вопрос