Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Sólo 2 bucles para sumar todas combinaciones de tres números de un vector

Estas en el tema de Sólo 2 bucles para sumar todas combinaciones de tres números de un vector en el foro de C/C++ en Foros del Web. Pues tal y como el título del post dice, ¿alguien me ayuda? He pensado varioas combinaciones jugando con restas y sumas en las iteraciones... pero ...
  #1 (permalink)  
Antiguo 21/10/2014, 16:35
 
Fecha de Ingreso: octubre-2014
Mensajes: 13
Antigüedad: 9 años, 5 meses
Puntos: 0
Sólo 2 bucles para sumar todas combinaciones de tres números de un vector

Pues tal y como el título del post dice, ¿alguien me ayuda?
He pensado varioas combinaciones jugando con restas y sumas en las iteraciones... pero se me repiten números o incluso em faltan, ¿se os ocurre algo mejor para sumar todas las combinaciones posibles de tres números de un vector usando dos bucles (ni más, ni menos)?

Gracias y saludos!
  #2 (permalink)  
Antiguo 22/10/2014, 04:09
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Sólo 2 bucles para sumar todas combinaciones de tres números de un vector

¿C o C++?

¿Con sumar todas las combinaciones se entiende que únicamente te interesa el resultado de la suma de los tres elementos o te refieres a almacenar en un vector todas las combinaciones que se encuentren?
  #3 (permalink)  
Antiguo 22/10/2014, 06:56
 
Fecha de Ingreso: octubre-2014
Mensajes: 13
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Sólo 2 bucles para sumar todas combinaciones de tres números de un vector

Cita:
Iniciado por eferion Ver Mensaje
¿C o C++?

¿Con sumar todas las combinaciones se entiende que únicamente te interesa el resultado de la suma de los tres elementos o te refieres a almacenar en un vector todas las combinaciones que se encuentren?
C++ preferiblemente.
Quiero ir obteniendo los vqlores para compararlos con una variable y para comprobar si se ha hallado una determinada cantidad. Pero el problema es que no sé como cubrir todas las combinaciones de tres números del vector usando sólo dos bucles.
  #4 (permalink)  
Antiguo 22/10/2014, 07:14
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 6 meses
Puntos: 204
Respuesta: Sólo 2 bucles para sumar todas combinaciones de tres números de un vector

Suponiendo que cada combinación únicamente se ha de contabilizar una vez puedes probar con algo tal que:

Código C++:
Ver original
  1. int main( )
  2. {
  3.   std::vector< int > numeros = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
  4.  
  5.   for ( unsigned int i=0; i<numeros.size( ) - 2; ++i )
  6.   {
  7.     unsigned int j = i+1;
  8.     unsigned int k = j+1;
  9.     while ( j < numeros.size( ) && k < numeros.size( ) )
  10.     {
  11.       std::cout << numeros[ i ] << numeros[ j ] << numeros[ k ] << std::endl;
  12.  
  13.       k++;
  14.       if ( k == numeros.size( ) )
  15.       {
  16.         j++;
  17.         k = j+1;
  18.       }
  19.     }
  20.   }
  21. }

Como puedes ver imprime todas las combinaciones posibles de tres números.
  #5 (permalink)  
Antiguo 22/10/2014, 10:33
Avatar de leosansan  
Fecha de Ingreso: mayo-2012
Ubicación: GRAN CANARIA
Mensajes: 194
Antigüedad: 11 años, 10 meses
Puntos: 49
Respuesta: Sólo 2 bucles para sumar todas combinaciones de tres números de un vector

Cita:
Iniciado por Lifka Ver Mensaje
C++ preferiblemente.
.......................... Pero el problema es que no sé como cubrir todas las combinaciones de tres números del vector usando sólo dos bucles.
<¿Y quién obliga a dos bucles?. Para las combinaciones tomados de tres en tres me basta un for :

Código C++:
Ver original
  1. #include <iostream>
  2. #include<vector>
  3.  
  4. int main ( void ) {
  5.   size_t i = 0 , j = 1 , k = 2  , cont = 1 ;
  6.   std::vector < int > num = { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 /**/} ;
  7.   for ( k = j + 1  ; k <= num.size ( ) ; k++ ) {
  8.     if ( k == num.size ( )  )
  9.         j++ , k = j + 1 ;
  10.       if ( k < num.size ( ) && i < num.size ( ) - 1 )  
  11.         std::cout << "( "<< cont << "  )"<< "   " << "[  " << num [ i ] << "   " <<  num [ j ] << "   " << num [ k ]  << "  ]" << std::endl  , cont++ ;
  12.     if ( j == num.size ( ) - 1  )
  13.       i++ , j = i + 1 , k = j ;
  14.   }
  15.   return  std::cout << "\n\nTotal de combinaciones : " << cont - 1 , 0 ;
  16. }

¡¡¡Saluditos!!!

  #6 (permalink)  
Antiguo 26/10/2014, 06:47
 
Fecha de Ingreso: octubre-2014
Mensajes: 13
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Sólo 2 bucles para sumar todas combinaciones de tres números de un vector

Genial chicos, muchas gracias me ha servido un montón como ejemplo.
Aunque parezca una tontería todo esto era por un problema de eficiencia...

Etiquetas: bucles, combinaciones, todas, tres, vector
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:48.