Sigui v un vector d’enters de mida
.
Una divisió de v és una
posició
del vector (on
),
tal que divideix el vector v en dues parts:
les posicions que van del a .
les posicions que van de fins a .
La divisió equilibrada és una posició de la llista tal que diferència entre la suma dels elements que hi ha des de la posició fins a la posició i la suma dels elements entre les posicions i és mínima.
Feu la funció :
int divisio_equilibrada(const vector<int>& v){
// Pre: v es un vector d'enters no buit de mida n > 2
// Post: Retorna la posició corresponent a la partició equilibrada
// Si n'hi haguessin més d'una retorna la de més a l'esquerra
Per exemple, si la funció rep el vector:
, retorna , ja que que és la diferència mínima
, retorna , ja que que és la diferència mínima
Tingueu en compte que, si calculeu la suma total de la llista al
principi de la funció, podreu resoldre aquest problema amb una
sola passada sobre el vector v. La primera
vegada la suma de l’esquerra valdrà
i la suma de la dreta serà la suma de tots els elements. A partir d’aquí
podeu pasar un element de la dreta a l’esquerra a cada passada.
Després heu de fer un programa principal que llegeixi una seqüència d’enters acabada en , crei el vector amb tots els elements llegits menys el , cridi a la funció anterior i mostri el resultat per pantalla
Una seqüència d’enters acabada en de longitut .
La divisió equilibrada del vector v creat amb la
seqüència d’entrada. Si n’hi haguessin més d’una, torneu la de més a
l’esquerra.
Input
4 1 2 3 0
Output
2
Input
2 1 -3 4 0
Output
1
Input
2 1 -3 -2 -4 0
Output
0