La forma más fácil de resolver este problema es, en efecto, separar los flamencos por color (tener un arreglo para los flamencos azules, otro arreglo para los blancos, etc). El problema es que no hay ninguna garantía de haya la misma cantidad de flamencos de cada color, por lo que no queda claro de antemano cuánta memoria apartar para cada arreglo. La solución es aplicar lo que vimos: arreglos redimensionables que usan memoria dinámica. Lo pueden implementar de la forma "artesanal" con new[] y delete[], o pueden usar std::vector. Recuerden que std::vector se usa así: #include #include #include int main( ) { std::vector arr; arr.push_back(3); arr.push_back(1); arr.push_back(4); arr.push_back(1); arr.push_back(6); std::cout << "El arreglo tiene tamaño " << arr.size( ) << "\n"; for (int i = 0; i < arr.size( ); ++i) { std::cout << arr[i] << " "; } std::cout << "\n"; std::sort(&arr[0], &arr[0] + arr.size( )); // ¡ordenar el arreglo! for (int i = 0; i < arr.size( ); ++i) { std::cout << arr[i] << " "; } std::cout << "\n"; } Internamente, std::vector se encarga de todo lo referente a la memoria, así que ustedes ya no necesitarían pedirla o liberarla manualmente.