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:
#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!
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
}
no me da la suma que estimas tu, los 26110725
pero aqui el codigo...no use for pero se puede adaptar
#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;
}
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:
#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:
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
De hecho sí existe solución, la encontré a mano.
Pongo mi razonamiento (matematico):
Supongo que el primer cuadrado es n, entonces:
(http://subefotos.com/ver/?eb8e4d1b2b16ada99063f70ed1201384o.gif)
y luego de usar algunas identidades conocidas llego a:
(http://subefotos.com/ver/?18cf0ed6bbd511e72374bd39a438dec7o.gif)
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)
#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
: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 (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:
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 (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?
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.#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:
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.
#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
Jaja muy bueno lo de hacerlo a mano ;D
Usando esa fórmula se podría optimizar el código y obtener los resultados para los cuadrados de i hasta i+49, verdad?
;-) ;-)
leosansan
;-) ;-)
Cita de: jonyayala95 en 3 Enero 2013, 17:41 PM
Capooo! Muchisimas gracias! Eso era lo que buscaba, no me sabia lo del while
Mirándolo mejor, creo que no es necesario sumar cada vez 50 cuadrados, ya que bastaría sumarlos la primera vez solamente y luego restar por la izquierda al más pequeño y sumar por la derecha al siguiente, osea:#include<stdio.h>
int main()
{
int i = 0,j=0;
int suma = 0;
for(i=1; i <= 50; i++)
suma += i*i;
while (1){
if (suma==26110725){
break;
}
j++;suma+=-j*j+(50+j)*(50+j);
}printf("La suma es %d desde %d hasta %d\n",suma,j+1,j+50);
/*****************Para comprobar******************/
suma=0;
for(i=j+1 ; i <= j+50; i++){
printf("%d x %d = %d\n ", i,i,i*i);
suma += i*i;
}
printf("La suma es: %d\n", suma);
return 0;
}
Saluditos!.