Dev - C++ - definir un vector de elementos y calcular si existe algun numero en el vector que valga la suma de..

 
Vista:
Imágen de perfil de Francisco
Val: 55
Ha aumentado 1 puesto en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

definir un vector de elementos y calcular si existe algun numero en el vector que valga la suma de..

Publicado por Francisco (36 intervenciones) el 10/02/2018 07:06:17
Definir un vector de n elementos y calcular si existe algun numero en el vector que valga la suma de los demas numeros.
Hola les mando codigo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include<iostream>
using namespace std;
int main(){
    int arr[5];
    int i=0;
    int suma=0;
    int mayor=0;
    cout<<"ingrese valores del arreglo "<<endl;
    for(i=0;i<5;i++){
        cin >> arr[i];
    }
    for(i=1;i<5;i++){
        suma= suma+arr[i-1];
    }
    for(i=0;i<5;i++){
        if(arr[i]==suma){
            cout<<"hay un numero que equivale a la suma de los demas "<<endl;
        }
        else{
            cout<<"no hay un numero que vale la suma de los demas "<<endl;
            break;
        }
    }
 
 
    return 0;
}

Se que lo hice mal, pues debía encontrar una forma en la que por ej si tengo arr[]={1,2,3,4,5,15}
me diga que el ultimo elemento que vale 15 sea igual a la suma de los demás.
Se puede hacer manualmente, pero yo lo quiero hacer con bucle. ¿Cómo lo harían?

Lo volvi a hacer
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include<iostream>
using namespace std;
int main(){
    int arr[5];
    int i=0;
    int equiv_suma=0;
    int suma=0;
    cout<<"ingrese valores del arreglo "<<endl;
    for(i=0;i<5;i++){
        cin >> arr[i];
    }
    for(i=0;i<5;i++){
        suma=suma+arr[i];
    }
    equiv_suma=arr[0];
    for(i=0;i<5;i++){
        if(arr[i]>equiv_suma ){
            equiv_suma= arr[i];
        }
    }
    if(equiv_suma-suma==0){
        cout<<"ese elemento es equivalente a la suma de los demas "<<endl;
    }
    else{
        cout<<"ese elemento no vale la suma de los demas "<<endl;
    }
    return 0;
}

Pero siempre me dice "ese elemento no vale la suma de los demas", quiero saber como puedo corregirlo. Agradezco su respuesta.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

definir un vector de elementos y calcular si existe algun numero en el vector que valga la suma de..

Publicado por agustin (522 intervenciones) el 10/02/2018 11:33:37
¿Algo así?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<iostream>
 
using namespace std;
 
#define N_ELEMENTOS 5
 
int main(){
    int arr[N_ELEMENTOS];
    int i,j,suma;
    bool encontrado=false;
 
    cout << "ingrese valores del arreglo" << endl;
    for(i=0;i<N_ELEMENTOS;i++){
        cin >> arr[i];
    }
    for(i=0;i<N_ELEMENTOS;i++){
    	suma=0;
    	for(j=0;j<N_ELEMENTOS;j++){
    		if(j != i){
    			suma+=arr[j];
    		}
    	}
    	if(arr[i]==suma){
            encontrado=true;
            break;
        }
    }
    if(encontrado==true){
        cout << "hay un numero que equivale a la suma de los demas";
    }else{
        cout << "no hay un numero que vale la suma de los demas";
    }
    return 0;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 338
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

definir un vector de elementos y calcular si existe algun numero en el vector que valga la suma de..

Publicado por Martín (158 intervenciones) el 10/02/2018 13:42:10
En esta solución se usa un std::vector, que es el array por excelencia del C++, y dos algoritmos de la STL: std::accumulate que calcula la suma de una colección de números, y std::max_element, que devuelve un iterador al elemento mayor de la colección.

Si uno de los números es la suma de los otros, entonces la suma de todos ellos el igual al doble del mayor; por ejemplo:
1+2+3+4+5 = 15

y entonces, también es:
1+2+3+4+5+15 = 2*15

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <vector>
#include <iostream>
#include <algorithm>
#include <numeric>
 
int main()
{
    int tam;
    std::cout << "Cantidad de elementos: ";
    std::cin >> tam;
    std::vector<int> v(tam);
 
    std::cout << "Elementos del vector:\n";
    for (int i = 0; i < tam; ++i) {
        std::cout << "elemento " << i+1 << "? ";
        std::cin >> v[i];
 
    }
 
    // si uno de ellos es la suma de los otros, 
    // la suma total es el doble del mayor.
 
    int suma = std::accumulate(v.begin(), v.end(), 0);
    int mayor = *std::max_element(v.begin(), v.end());
 
    if (suma == 2 * mayor) {
        std::cout << "uno de ellos es la suma de los otros.\n";
    }
    else {
        std::cout << "ninguno es la suma de los otros.\n";
    }
 
    return 0;
}
// clases particulares -> enviar mensaje privado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

definir un vector de elementos y calcular si existe algun numero en el vector que valga la suma de..

Publicado por agustin (522 intervenciones) el 10/02/2018 22:34:02
Muy interesante tu solución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar