Necesito ayuda con un problemita

Iniciado por jonyayala95, 2 Enero 2013, 03:51 AM

0 Miembros y 1 Visitante están viendo este tema.

jonyayala95

Hola, necesito ayuda con un programita que no puedo codear.
La idea es, ver si existen 50 cuadrados perfectos consecutivos que sumen 26110725; y ademas verificar si la solución es única o hay mas.

Bien, mi idea es armar algo que sume los primeros 50 cuadrados (1,4,9,..2500) y ver si la suma es 26110725. Si no lo es (obviamente no) que pruebe sumando (4,9,16,.....2601) y asi siguiendo siempre aumentando en 1, hasta dar con la suma buscada.

Tiene que ser en C++ (creo qeu ubiqué bien el tema).

No se como sumar los resultados que me da el for, por ejemplo si tengo:
Código (cpp) [Seleccionar]

#include<stdio.h>
#include<conio.h>
int main()
{
 int x=0;
 for(x=1;x<=50;x++)
 {
   printf("%d x %d = %d\n ", x,x,x*x);
 }
 
getch();
}

Como hago para sumar los 50 cuadrados que da el for?
Agradecería que me dieran solución al problema original.
Muchiiisiimas gracias!

avesudra

#1
Hola jonyayala95 puedes utilizar otra variable dentro del for:
#include<stdio.h>
///#include<conio.h> Esto sobra que así no es portable el código
int main()
{
   int i = 0;
   int suma = 0;
   for(i=1 ; i <= 50; i++)// Las variables utilizadas por excelencia para los for's son i , j  , k ...(aunque puedes utilizar la que quieras)
   {
       printf("%d x %d = %d\n ", i,i,i*i);
       suma += i*i; ///Esto es lo mismo que suma = suma + (i*i)
   }
   printf("La suma es: %d\n", suma);
   ///getch(); Puedes sustituirlo por getchar
   printf("Presione una tecla para terminar. . .");
   getchar();
   return 0;///Debes poner el valor de retorno
}
Regístrate en

flony

#2
no me da la suma que estimas tu, los 26110725
pero aqui el codigo...no use for pero se puede adaptar
Código (cpp) [Seleccionar]

#include <iostream>

using namespace std;

int main ()
{
int limite=26110725;
int cuadrado=0;
int suma=0;
int variable=0;
do
{
variable=variable++;
cuadrado=variable*variable;
suma=cuadrado+suma;
}
while (limite>=suma);
cout<<"sumandos "<<variable<<endl;
cout<<"la suma da "<<suma<<endl;
cin.get();
return 0;
}
si un problema no tiene solucion entonces no es un problema...es algo inevitable

leosansan

Cita de: jonyayala95 en  2 Enero 2013, 03:51 AM
Hola, necesito ayuda con un programita que no puedo codear.
La idea es, ver si existen 50 cuadrados perfectos consecutivos que sumen 26110725; y ademas verificar si la solución es única o hay mas.
La idea de flony es buena pero no tiene en cuenta que sean 50 los cuadrados. En cualquier caso tampoco da,no existe solución:
Código (cpp) [Seleccionar]
#include<stdio.h>

int main()
{
    int i = 0,j=0;
    int suma = 0;
    while (suma<=261100725){
        for(i=1 +j; i <= 50+j; i++){
            suma += i*i;
           }
        j++;
    }printf("La suma mas proxima es %d",suma);
    return 0;
}

Saluditos!. ......  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

flony

CitarLa idea es, ver si existen 50 cuadrados perfectos consecutivos que sumen 26110725; y ademas verificar si la solución es única o hay mas.

Bien, mi idea es armar algo que sume los primeros 50 cuadrados (1,4,9,..2500) y ver si la suma es 26110725. Si no lo es (obviamente no) que pruebe sumando (4,9,16,.....2601) y asi siguiendo siempre aumentando en 1, hasta dar con la suma buscada.
vamos por parte llegado a los 50 no da ni a palo el resultado buscado, recién a los 428 sumandos da una aproximación al numero buscado, el rdo es 26.225.914, eso da mi code.
CitarSi no lo es (obviamente no) que pruebe sumando (4,9,16,.....2601) y asi siguiendo siempre aumentando en 1, hasta dar con la suma buscada.
...es evidente que el sabe que no da a los 50 operandos y que vaya sumando de a uno.
la parte de
Citary ademas verificar si la solución es única o hay mas
...es la que no entiendo...si hay mas de una solución implica que busca una raíz cuadrada y no una sumatoria, lo cual nunca aclara
si un problema no tiene solucion entonces no es un problema...es algo inevitable

jonyayala95

#5
De hecho sí existe solución, la encontré a mano.

Pongo mi razonamiento (matematico):

Supongo que el primer cuadrado es n, entonces:



y luego de usar algunas identidades conocidas llego a:



Luego de resolver esas cuadraticas me da soluciones n=698 y n=-747

Posiblemente no me expliqué bien...

Agrego el code con el ejemplo n= 698 (tambien anda con n=-747)

Código (cpp) [Seleccionar]
#include<stdio.h>
int main()
{
   int i = 0;
   int suma = 0;
   for(i=698 ; i <= 747; i++)
   {
       printf("%d x %d = %d\n ", i,i,i*i);
       suma += i*i;
   }
   printf("La suma es: %d\n", suma);
 
   printf("Presione una tecla para terminar. . .");
   getchar();
   return 0;



Necesito por favor me guien para terminarlo, muchisimas gracias por sus respuestas

flony

#6
 :rolleyes: :rolleyes:
sabia que era un binomio....desde que dijiste que tenia dos soluciones
bueno asi saque la parte final de la sumatoria
http://subefotos.com/ver/?c67546c5bd5a37fa34750184fe9c1ad9o.jpg
no se que resultado da...vi los numeritos y me asuste  :xD :xD

y estas pidiendo una calculadora de bascara?...eso es un poquito mas complicado  :-X :-X
igual hice un código tonto, modificando un poco el que puse, que buscaría una aproximación pero no estoy seguro...si alguien mas da una mano genial  ;D
modificado
el codigo lo estamos revisando...jajajaja pequeño error de reglas de potenciacion  :silbar: :silbar:
si un problema no tiene solucion entonces no es un problema...es algo inevitable

jonyayala95

Cita de: flony en  3 Enero 2013, 13:47 PM
:rolleyes: :rolleyes:
sabia que era un binomio....desde que dijiste que tenia dos soluciones
bueno asi saque la parte final de la sumatoria
http://subefotos.com/ver/?c67546c5bd5a37fa34750184fe9c1ad9o.jpg
no se que resultado da...vi los numeritos y me asuste  :xD :xD

y estas pidiendo una calculadora de bascara?...eso es un poquito mas complicado  :-X :-X
igual hice un código tonto, modificando un poco el que puse, que buscaría una aproximación pero no estoy seguro...si alguien mas da una mano genial  ;D
modificado
el codigo lo estamos revisando...jajajaja pequeño error de reglas de potenciacion  :silbar: :silbar:

No, yo enrealidad lo que buscaba era un programita que pruebe sumando (1^2+2^2+...+50^2) y vea que resultado da, si es igual que 26110725 que pare y diga, el primer cuadrado es 1. Si no es igual que 26110725 que pruebe sumando (2^2+3^2+4^2+...+51^2) y verifique si el resultado es 26110725. Se entiende no?

leosansan

Cita de: jonyayala95 en  3 Enero 2013, 03:25 AM
De hecho sí existe solución, la encontré a mano.

Necesito por favor me guien para terminarlo, muchisimas gracias por sus respuestas
A mano no creo que cuente mucha, sería más bien una comprobación que una solución.
Te vuelvo a postear el código pero corregido, ya que tenía una cifra de más en el anterior y no iniciaba la suma a cero en cada intento. Hace lo que quieres: suma de 1 a 50 y si no da de 2 a 51 y si no da de 3 a 52, etc.

Código (cpp) [Seleccionar]
#include<stdio.h>

int main()
{
    int i = 0,j=0;
    int suma = 0;
    while (1){
        for(i=1 +j; i <= 50+j; i++){
            suma += i*i;
           }
        if (suma==26110725){
             break;
        }
        j++;suma=0;
    }printf("La suma  es %d desde %d hasta %d\n",suma,i-50,i-1);
    /*****************Para comprobar******************/
    /*suma=0;
            for(j=i-50 ; j <= i-1; j++){
                printf("%d x %d = %d\n ", j,j,j*j);
                suma += j*j;
            }
         printf("La suma es: %d\n", suma);*/
    return 0;
}

Saluditos!. ...  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

jonyayala95

Cita de: leosansan en  3 Enero 2013, 15:42 PM
A mano no creo que cuente mucha, sería más bien una comprobación que una solución.
Te vuelvo a postear el código pero corregido, ya que tenía una cifra de más en el anterior y no iniciaba la suma a cero en cada intento. Hace lo que quieres: suma de 1 a 50 y si no da de 2 a 51 y si no da de 3 a 52, etc.

Código (cpp) [Seleccionar]
#include<stdio.h>

int main()
{
    int i = 0,j=0;
    int suma = 0;
    while (1){
        for(i=1 +j; i <= 50+j; i++){
            suma += i*i;
           }
        if (suma==26110725){
             break;
        }
        j++;suma=0;
    }printf("La suma  es %d desde %d hasta %d\n",suma,i-50,i-1);
    /*****************Para comprobar******************/
    /*suma=0;
            for(j=i-50 ; j <= i-1; j++){
                printf("%d x %d = %d\n ", j,j,j*j);
                suma += j*j;
            }
         printf("La suma es: %d\n", suma);*/
    return 0;
}

Saluditos!. ...  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

Capooo! Muchisimas gracias! Eso era lo que buscaba, no me sabia lo del while