2010-11-15 5 views
0

En C++ comment puis-je trouver les éléments 'n' du milieu d'un tableau? Par exemple si n = 3, et le tableau est [0,1,5,7,7,8,10,14,20], le milieu est [7,7,8].trouver des éléments du milieu à partir d'un tableau

p.s. Dans mon contexte, n et les éléments de tableau sont des nombres impairs, donc je peux trouver le milieu. Merci!

+5

Est-ce ce devoir? – dandan78

+0

Quelle a été votre approche jusqu'ici? Montre-nous ce dont tu as besoin d'aide, plutôt que de nous demander de le faire pour toi. – luke

+0

Non, je travaille sur une application de traitement d'image numérique. Y at-il une fonction en C++? – qwerty

Répondre

1

C'est rapide, pas testé, mais l'idée de base ...

const int n = 5; 

// Get middle index 
int arrLength = sizeof(myArray)/sizeof(int); 

int middleIndex = (arrLength - 1)/2; 
// Get sides 
int side = (n - 1)/2; 

int count = 0; 

int myNewArray[n]; 

for(int i = middleIndex - side; i <= middleIndex + side; i++){ 
    myNewArray[count++] = myArray[i]; 
} 
0

Eh bien, si vous devez choisir les numéros n, vous savez qu'il y aura size - n articles non-sélectionnés. Comme vous voulez choisir des nombres au milieu, vous voulez avoir autant de nombres 'non triés' de chaque côté du tableau, c'est (size - n)/2. Je ne ferai pas vos devoirs, mais j'espère que cela vous aidera.

+0

Ce ne sont pas des devoirs! – qwerty

0

Eh bien, l'algorithme naïf suit:

  1. Trouver le milieu, qui existe parce que vous avez spécifié que la longueur est impair.
  2. Sélectionnez de manière répétée un élément à gauche et un élément à droite. Vous pouvez toujours le faire parce que vous avez spécifié que n est impair.

Vous pouvez faire l'observation suivante:

Notez que une fois que vous avez choisi le milieu, il y a n - 1 autres éléments à enlever. C'est un nombre pair et (n - 1)/2 doit provenir de la gauche de l'élément du milieu et (n - 1)/2 doit provenir de la droite. L'élément central a l'index (length - 1)/2. Par conséquent, l'index inférieur du premier élément sélectionné est (length - 1)/2 - (n - 1)/2 et l'index supérieur du dernier élément sélectionné est (length - 1)/2 + (n - 1)/2. Par conséquent, les indices nécessaires sont (length - n)/2 - 1 à (length + n)/2 - 1.

1
int values[] = {0,1,2,3,4,5,6,7,8}; 
const size_t total(sizeof(values)/sizeof(int)); 
const size_t needed(3); 

vector<int> middle(needed); 
std::copy(values + ((total - needed)/2), 
    values + ((total + needed)/2), middle.begin()); 

N'a pas vérifié cela avec toutes les conditions aux limites possibles. Avec les données d'échantillon, j'obtiens middle = (3,4,5), comme désiré.

Questions connexes