Czy w tablicy n-elementowej jakaś liczba występuje więcej niż n/2 razy

    -- Sebastian Pawlak, 1997.



Kod źródłowy pliku "n_div_2.c":

/* Szukanie czy w tablicy n-elementowej
 * wystepuje jakas liczba wiecej niz n/2.
 * autor: Sebastian Pawlak
 */
#include <stdio.h>
#define n 14 /* ilosc elementow tablicy (TYLKO WARTOSCI PARZYSTE !!!) */
#define n_pol (n/2)

int main ()
{
    short t[n] = { 2,2,2,1,1,1,1,1,1,1,1,0,1,0 };
    short i, a, c;
    short buf;
    short l1 = -10000, l2 = -10000, il1 = 0, il2 = 0;

/********************************************************************
 * TYPOWANIE KANDYDATOW, KTORZY MOGA WYSTEPOWAC WIECEJ NIZ n/2 RAZY *
 ********************************************************************/

/* W petli, od 1 do n-1, do kazdego indeksu tablicy zagladamy tylko 2 razy !
 * oprocz indeksow skrajnych, do ktorych zagladamy tylko 1 raz.
 */

    for (i = 1; i < n; i++) {
        a = t[i - 1];
        c = t[i];

        if (a == c) {
            if (a == l1)
                il1++;
            else if (a == l2) {
                il2++;
                if (il2 > il1) {
                    buf = l1;
                    l1 = l2;
                    l2 = buf;
                    buf = il1;
                    il1 = il2;
                    il2 = buf;
                }
            } else {
                l2 = a;
                il2 = 1;
	    }
        }
    }


/****************************************************
 *  TU SPRAWDZANE JEST CZY KTORAS Z WYTYPOWANYCH    *
 * LICZB RZECZYWISCIE WYSTEPUJE WIECEJ NIZ n/2 RAZA *
 ****************************************************/

    il1 = 0;
    il2 = 0;
    
    for (i = 0; ((i < n) && (il1 < = n_pol) &&
                 (il2 < = n_pol)); i++) {
        a = t[i];
        if (a == l1)
            il1++;
        else if (a == l2)
            il2++;
    }

    if (il1 > n_pol)
        printf("liczba %d wystepuje wiecej niz n/2 razy !\n", l1);
    else if (il2 > n_pol)
        printf ("liczba %d wystepuje wiecej niz n/2 razy !\n", l2);
    else
        printf ("nie znaleziono liczby, ktora wystepuje wiecej niz n/2 razy\n");

    return 0;
}
w3cw3c
automatyka przemysłowa