Trouver le deuxième plus grand nombre

Oui, il y a beaucoup de gens ont déjà discuté de ce problème mais celui-ci semble être un peu extraordinaire. Le programme devrait trouver le deuxième plus grand nombre parmi les cinq saisis par l’utilisateur. Nous ne pouvons utiliser ni loops ni déclarations if . Aussi, ne peut pas utiliser les arrays et goto's , mais peut utiliser l’opérateur ternaire. L’échantillon de I / 0:

Entrée: 34 -52 87 -12 20 Sortie: 34

Entrée: -87 52 87 87 20 Sortie: 87

Comme vous le voyez, l’utilisateur peut entrer deux mêmes numéros et le programme devrait pouvoir le traiter de cette façon. Ceci est la programmation en C.

 #include  #include  int main(void) { int i1, i2, i3, i4, i5; int max, second_max; scanf("%d %d %d %d %d", &i1, &i2, &i3, &i4, &i5); max = i1; max = (i2 > max) ? i2 : max; max = (i3 > max) ? i3 : max; max = (i4 > max) ? i4 : max; max = (i5 > max) ? i5 : max; second_max = i1; second_max = (i1 > second_max && i1  second_max && i2  second_max && i3  second_max && i4  second_max && i5 < max) ? i5 : second_max; printf("\nmax: %d", max); printf("\nsecond_max : %d", second_max); return 0; } 

Ici, je peux tout trouver, en ce qui concerne le deuxième échantillon de sortie, il échoue. J’ai une expérience en programmation mais je ne peux pas résoudre ce problème depuis le matin

Clairement, le problème est facile à résoudre si vous pouvez sortinger les nombres. Alors, comment sortinger les nombres en utilisant uniquement des opérateurs ternaires? La réponse s’appelle un réseau de sorting .

Voici à quoi ressemble le code:

 #include  void swap( int *a, int *b ) { int x = *a <= *b ? *a : *b; int y = *a <= *b ? *b : *a; *a = x; *b = y; } int main( void ) { int a = 1, b = 9, c = 3, d = 8, e = 3; swap( &a, &b ); swap( &c, &d ); swap( &b, &e ); swap( &a, &b ); swap( &d, &e ); swap( &a, &c ); swap( &c, &d ); swap( &b, &c ); swap( &c, &d ); printf( "%d %d %d %d %d\n", a,b,c,d,e ); } 

Une fois les nombres sortingés, le deuxième plus grand nombre est d .

Notez que si vous ne pouvez pas utiliser de sous-programmes et / ou de pointeurs, copiez simplement le corps de la fonction swap et collez-le dans main fichier main neuf fois. Puis changez les lettres si nécessaire. Amusez-vous avec ça.

Initialise deux variables: la plus haute et la plus haute avec INT_MIN

Faites-les pour tous les éléments:

Secondhighest = max (a [i], secondhighest)

Plus haut

TC: O (N)