Quantcast

Zadatak iz nizova u C-u?

*Vendi*

Zainteresovan član
Poruka
185
Zadatak u C-u, oblast nizovi
nek resi neko ko zna:

U nizu od n brojeva vodeci broj (ako postoji) je onaj koji se pojavljuje najmanje [n/2]+1 puta. Napisati funkciju koja vraca indeks i takav da je a vodeci element. Ako u nizu ne postoji vodeci element onda vraca -1.

Unapred Hvala!!!
 

_Doctor_

Početnik
Poruka
34
Kod:
#include <stdio.h>
#include <stdlib.h>

int pojavljivanje (const int* niz, int n, int broj){
	int p, i;
	for(p=i=0; i<n; p += niz[i++] == broj);
	return  p;
}

int vodeciBroj (const int* a, int n){
	int poj = (int)(n / 2)+1;
	int i, j,
		prethodnoPoj = 0,
		index = -1;

	for(i=0; i<n; i++){
		for(j=0; j<i && a[i] != a[j]; j++);
		if(i == j){  /*  Ako prodje ovaj uslov to znachi da 
			          je taj broj jedinstven do sada i za njega
				  treba proveriti broj pojavljivanja
			       */
			int p = pojavljivanje(a, n, a[i]);

			/*
			   Ovde proveravam da li se taj broj pojavljuje dovoljan broj puta 
			   i ako da proveri da li je taj broj najvecci do sada
			 */
			if(p >= poj && p > prethodnoPoj){
				prethodnoPoj = p;
				index = i;
			}

		}
	}
	return index;
}



main () {
	int* a, n, i;
	while(1){
		printf("\nn? ");
		scanf("%d",&n);
	if(n <= 0)break;
	    printf("A? "); a = malloc(n * sizeof(int));
		for(i=0; i<n; scanf("%d",&a[i++]));
		i = vodeciBroj(a, n);

		if(i == -1)
			printf("Takav broj ne postoji!\n");
		else
			printf("Vodeci broj je: a[%d]=%d\n", i+1, a[i]);
		free(a); a = NULL;
	}
}
 

Top