/ / Druga największa liczba (z 3/4 liczb) przy użyciu trójskładnikowego operatora w C? - c, liczby, operator trójskładnikowy

Druga największa liczba (z 3/4 cyfr) za pomocą Ternary Operatora w C? - c, liczby, operator trójskładnikowy

Wszystkie przykłady online dla operatorów trójskładnikowych mają po prostu metodę znalezienia największej liczby.

Czy możliwe jest opracowanie kodu znajdującego drugą największą liczbę 3 lub 4 liczb przy użyciu operatorów trójskładnikowych?

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz zdobyć drugą największą z 3 liczb (a,b i c) przy użyciu operatora trójskładnikowego w następujący sposób:

int x = (a >= b && a >= c) ? ((b >= c) ? b : c) :
((b >= c) ? ((a >= c) ? a : c) : ((a >= b) ? a : b));

Chodzi o to, aby znaleźć, która jest największa, a następnie wybrać największą z pozostałych dwóch - największą wartość inną niż największa ze wszystkich trzech.

W powyższym, (a >= b && a >= c) będzie prawdziwe jeśli a jest największy (większy niż b i c) ... Jeśli tak, wynik jest następujący ((b >= c) ? b : c), co daje większy z b i c.

Gdyby a był nie największy oceniamy ((b >= c) ? ((a >= c) ? a : c) : ((a >= b) ? a : b)). W tym, (b >= c) sprawdza, czy b jest największym z trzech (już wiemy a nie jest, więc po prostu porównujemy b i c)... i jeśli b jest największym z trzech, którego używamy ((a >= c) ? a : c) zdobyć największy z a i c.

Jeśli nie a ani b jest więc największy c musi być ... więc oceniamy ((a >= b) ? a : b) zdobyć największy z a i b.

Ten sam wzór można rozszerzyć do czterech liczbzamiast trzech ... ale nawet z trzema robi się dość długo, i prawdopodobnie bardziej sensowne byłoby użycie (ewentualnie wbudowanej) funkcji za pomocą bardziej prostej metody.


0 dla odpowiedzi nr 2

Nie sądzę, że istnieje zbyt sprytna sztuczka, aby uzyskać drugą największą liczbę z operatorami trójskładnikowymi. Ale możesz użyć operacji trójskładnikowej, aby uzyskać najmniejszą liczbę:

int min(int a, int b) {
return (a < b)? a : b;
}


int secondLargest(int a, int b, int c) {
return (a < b && a < c)? min(b, c) :
(b < a && b < c)? min(a, c) :
min(a, b);
}

Dla 4 liczb możemy skorzystać z wcześniej zdefiniowanych funkcji:

int secondLargest(int a, int b, int c, int d) {
int minVar = (min(a, b), min(c, d))
return a == minVar? secondLargest(b, c, d) :
b == minVar? secondLargest(a, c, d) :
c == minVar? secondLargest(a, b, d) :
secondLargest(a, b, c) :
}

Możesz to utrzymać dla dowolnie dużej liczby zmiennych, ale w pewnym momencie sensowniej jest posortować je w tablicy, a następnie odczytać pozycję od ostatniej do ostatniej.