Autor
|
Tema: Necesito ayuda con un problemita (Leído 4,005 veces)
|
jonyayala95
Desconectado
Mensajes: 9
|
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!
|
|
« Última modificación: 3 Enero 2013, 02:11 am por simorg »
|
En línea
|
|
|
|
avesudra
Desconectado
Mensajes: 724
Intentando ser mejor cada día :)
|
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. . ."); return 0;///Debes poner el valor de retorno }
|
|
« Última modificación: 2 Enero 2013, 17:07 pm por avesudra »
|
En línea
|
Regístrate en
|
|
|
flony
Desconectado
Mensajes: 583
|
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; }
|
|
« Última modificación: 3 Enero 2013, 02:08 am por simorg »
|
En línea
|
si un problema no tiene solucion entonces no es un problema...es algo inevitable
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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!. ......
|
|
|
En línea
|
|
|
|
flony
Desconectado
Mensajes: 583
|
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.
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. 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. ...es evidente que el sabe que no da a los 50 operandos y que vaya sumando de a uno. la parte de y 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
|
|
|
En línea
|
si un problema no tiene solucion entonces no es un problema...es algo inevitable
|
|
|
jonyayala95
Desconectado
Mensajes: 9
|
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) #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
|
|
« Última modificación: 3 Enero 2013, 14:27 pm por jonyayala95 »
|
En línea
|
|
|
|
|
jonyayala95
Desconectado
Mensajes: 9
|
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?
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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!. ...
|
|
|
En línea
|
|
|
|
jonyayala95
Desconectado
Mensajes: 9
|
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!. ... Capooo! Muchisimas gracias! Eso era lo que buscaba, no me sabia lo del while
|
|
|
En línea
|
|
|
|
|
|