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; }