elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Reto Universidad [C++].
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 2 [3] 4 5 6 Ir Abajo Respuesta Imprimir
Autor Tema: Reto Universidad [C++].  (Leído 47,719 veces)
bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #20 en: 23 Julio 2011, 13:51 pm »

El ejercicio 7 es un juego, en el que juegan el humano contra el ordenador. El ordenador decide quien empieza y tienen que ir restando 1, 2 o 3 en turnos alternos hasta que ya no haya más objetos que coger. El que coge el último objeto, pierde.
Pues bien, con esas condiciones, tienes que desarrollar un algoritmo en el que SIEMPRE gane la máquina.


En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #21 en: 24 Julio 2011, 16:46 pm »

Ya está añadido el contenido del tema 2 y los ejercicios correspondientes. Mirar primer post.


En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
.mokk.

Desconectado Desconectado

Mensajes: 177



Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #22 en: 28 Julio 2011, 00:54 am »

Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. static bool EsPar(int n)
  6. {
  7.       return ((n % 2) == 0);
  8. }
  9.  
  10. int main (int argc, char *argv[])
  11. {
  12.    int tam;
  13.    do{
  14.        cout << "Ingrese el tama&#241;o del triangulo [IMPAR]" << endl;
  15.        cin >> tam;
  16.    }while(EsPar(tam) || tam < 2);
  17.    for(int i = 0; i <= tam/2; i++)
  18.    {
  19.            for (int j=1; j <= tam/2-i; j++)
  20.            {
  21.                cout<<" ";
  22.            }
  23.            for (int j=1; j <= i*2+1; j++)
  24.            {
  25.                cout<<"*";
  26.            }
  27.            for (int j=1; j <= tam/2-i; j++)
  28.            {
  29.                cout<<" ";
  30.            }
  31.            cout << endl;
  32.    }
  33.    cin.get();cin.get();
  34.    return 0;
  35. }
  36.  

El segundo no lo entiendo:
Citar
N=25064 e i=2, el resultado es el dígito 6, y para i=7, el resultado es -1.
Porque el resultado seria 6 si "i" se encuentra en la posicion 0 ? o como?
« Última modificación: 28 Julio 2011, 00:57 am por .mokk. » En línea

bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #23 en: 28 Julio 2011, 21:13 pm »

El segundo no lo entiendo:Porque el resultado seria 6 si "i" se encuentra en la posicion 0 ? o como?

El ejercicio pide que introduzcamos un numero (N) y una posición (i). Por tanto, fijándonos en el ejemplo, vemos que N=25064 e i=2, por lo que el resultado es 6. i es la posición en el número, empezando desde la derecha (i=1->resultado=4; i=3->resultado = 0). No sé si me he explicado bien...

Por cierto, le acabo de echar un vistazo a tu código del triángulo. Aunque en el ejercicio ponga de ejemplo N=5, el código debe realizarse para cualquier número, par o impar. Es que he visto que solo lo construye para los número impares  ;)
Y otra cosa, la altura es igual a N. Según tu código, la altura es N/2.

Gracias por intentarlo y postearlo, te animo a que le eches otro vistazo al código anterior y te animes con el ejercicio 2  :D
« Última modificación: 28 Julio 2011, 21:35 pm por bigfu » En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
ghastlyX
Ex-Staff
*
Desconectado Desconectado

Mensajes: 1.900



Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #24 en: 28 Julio 2011, 22:38 pm »

Algunos de los ejercicios del tema 2 te han quedado muy largos y poco simples, suponiendo que sean correctos, puesto que no los he mirado todos. Te pongo soluciones alternativas más cortas y simples, por lo menos a mi parecer.

Código
  1. //Problema 1
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int main() {
  6.    int n;
  7.    cin >> n;
  8.    for (int i = 1; i <= n; ++i) {
  9.        cout << string(n - i, ' ');
  10.        for (int j = 0; j + 1 < i; ++j) cout << "* ";
  11.        cout << "*" << endl;
  12.    }
  13. }
  14.  
  15. //Problema 2
  16. #include <iostream>
  17. using namespace std;
  18.  
  19. void imprime(int n, int i) {
  20.    if (i == 1) cout << n%10 << endl;
  21.    else if (n/10 == 0) cout << -1 << endl;
  22.    else imprime(n/10, i - 1);
  23. }
  24.  
  25. int main() {
  26.    int n, i;
  27.    cin >> n >> i;
  28.    imprime(n, i);
  29. }
  30.  
  31. //Problema 3
  32. #include <iostream>
  33. using namespace std;
  34.  
  35. int main() {
  36.    string s;
  37.    cin >> s;
  38.    for (int i = 0; i < s.size() >> 1; ++i) {
  39.        if (i > 0) cout << ", ";
  40.        cout << s[i] << " + " << s[s.size() - 1 - i] << " = " << s[i] - '0' + s[s.size() - 1 - i] - '0';
  41.    }
  42.    if (s.size()&1) cout << ((s.size() > 1)?", ":"") << s[s.size()>>1];
  43.    cout << endl;
  44. }
  45.  
  46.  
  47. //Problema 4
  48. #include <iostream>
  49. using namespace std;
  50.  
  51. int main() {
  52.    int maxim = 0, act = 0;
  53.    char c, ant = '0';
  54.    while (cin >> c) {
  55.        if (c >= ant) ++act;
  56.        else {
  57.            maxim = max(maxim, act);
  58.            act = 1;
  59.        }
  60.        ant = c;
  61.    }
  62.    maxim = max(maxim, act);
  63.    cout << maxim << endl;
  64. }
  65.  
  66.  
  67. //Problema 6
  68. #include <iostream>
  69. using namespace std;
  70.  
  71. int mcd(int a, int b) {
  72.    if (a == b) return a;
  73.    return (a > b) ? mcd(a - b, b) : mcd(b - a, a);
  74. }
  75.  
  76. int main() {
  77.    int a, b;
  78.    cin >> a >> b;
  79.    cout << mcd(a, b) << endl;
  80. }
  81.  
En línea

bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #25 en: 28 Julio 2011, 23:53 pm »

Algunos de los ejercicios del tema 2 te han quedado muy largos y poco simples, suponiendo que sean correctos, puesto que no los he mirado todos. Te pongo soluciones alternativas más cortas y simples, por lo menos a mi parecer.

Código
  1. //Problema 1
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. int main() {
  6.    int n;
  7.    cin >> n;
  8.    for (int i = 1; i <= n; ++i) {
  9.        cout << string(n - i, ' ');
  10.        for (int j = 0; j + 1 < i; ++j) cout << "* ";
  11.        cout << "*" << endl;
  12.    }
  13. }
  14.  
  15. //Problema 2
  16. #include <iostream>
  17. using namespace std;
  18.  
  19. void imprime(int n, int i) {
  20.    if (i == 1) cout << n%10 << endl;
  21.    else if (n/10 == 0) cout << -1 << endl;
  22.    else imprime(n/10, i - 1);
  23. }
  24.  
  25. int main() {
  26.    int n, i;
  27.    cin >> n >> i;
  28.    imprime(n, i);
  29. }
  30.  
  31. //Problema 3
  32. #include <iostream>
  33. using namespace std;
  34.  
  35. int main() {
  36.    string s;
  37.    cin >> s;
  38.    for (int i = 0; i < s.size() >> 1; ++i) {
  39.        if (i > 0) cout << ", ";
  40.        cout << s[i] << " + " << s[s.size() - 1 - i] << " = " << s[i] - '0' + s[s.size() - 1 - i] - '0';
  41.    }
  42.    if (s.size()&1) cout << ((s.size() > 1)?", ":"") << s[s.size()>>1];
  43.    cout << endl;
  44. }
  45.  
  46.  
  47. //Problema 4
  48. #include <iostream>
  49. using namespace std;
  50.  
  51. int main() {
  52.    int maxim = 0, act = 0;
  53.    char c, ant = '0';
  54.    while (cin >> c) {
  55.        if (c >= ant) ++act;
  56.        else {
  57.            maxim = max(maxim, act);
  58.            act = 1;
  59.        }
  60.        ant = c;
  61.    }
  62.    maxim = max(maxim, act);
  63.    cout << maxim << endl;
  64. }
  65.  
  66.  
  67. //Problema 6
  68. #include <iostream>
  69. using namespace std;
  70.  
  71. int mcd(int a, int b) {
  72.    if (a == b) return a;
  73.    return (a > b) ? mcd(a - b, b) : mcd(b - a, a);
  74. }
  75.  
  76. int main() {
  77.    int a, b;
  78.    cin >> a >> b;
  79.    cout << mcd(a, b) << endl;
  80. }
  81.  

Muchas gracias por las sugerencias, pero el problema es que estoy haciendo los ejercicios acorde a lo que llevo visto hasta ahora, por lo que, por ejemplo, aún no podría utilizar variables de tipo string. Pero me vienen muy bien tus soluciones para volver a comparar los ejercicios cuando haya dado todo el temario.
Reconozco que mi principal fallo es no saber hacer los algoritmos más cortos y eficientes, pero estoy trabajando en ello (aunque de todas formas solo me piden que funcionen, pero me convendría aprender a simplificar).

gracias!
En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #26 en: 29 Julio 2011, 18:57 pm »

Compis, me he atascado con el ejercicio que me falta, no consigo verlo sin utilizar arrays. Me dais una pista (no me pongáis el código, por favor) para ver si lo puedo sacar?? Lo único que se me ocurre es un código larguísimo y que no tengo claro que funcione bien y no sé muy bien por donde meterle mano...

Citar
Ejercicio 5: Decimos que una sucesión a1,a2,...,an de enteros forma una montaña, si existe un h tal que: 1 <= h <= n y además a1<...ah-1 < ah > ah+1 >...an.
Definimos la longitud de una montaña como el número de enteros que la forman. Por ejemplo la sucesión -7,-1,6,21,15 es una montaña de longitud 5.

Definimos un valle de la misma forma que una montaña pero cambiando el signo de las desigualdades de la definición anterior: a1>...ah-1 > ah < ah+1 <...an. Por ejemplo, 24, 13, 6, 15, 50 sería un valle.

Dada una secuencia de enteros terminada en cero que como mínimo contiene una montaña y un valle (suponemos que la secuencia de enteros de entrada es una secuencia correcta de montañas y valles), diseña un programa que calcule la longitud de la montaña y el valle más largos.
En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #27 en: 1 Agosto 2011, 16:18 pm »

Al final lo conseguí hacer, me ha costado un poco pero lo he conseguido. Ahora, no me gusta la forma en que lo he resuelto. Me ha salido un código bastante lioso, pero es que no me salía otra forma de hacerlo.

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. void paisaje(int num, int& ant, unsigned& a, unsigned&b, bool& subida, bool& p_bajo);
  5.  
  6. int main() {
  7. int num, ant=0;
  8. bool subida_m = false, p_bajo = false;
  9. unsigned m = 0, v = 0;
  10. unsigned a = 0, b = 0;
  11.  
  12. cout << "Introduzca secuencia de enteros: ";
  13. do{
  14. cin >> num;
  15. paisaje(num,ant,a,b,subida_m,p_bajo);
  16. if(a>m){
  17. m = a;
  18. }
  19. if(b>v){
  20. v = b;
  21. }
  22. }while(num!=0);
  23.  
  24. cout << "La montaña mas larga: " << m << endl;
  25. cout << "El valle mas largo: " << v << endl;
  26.  
  27. return 0;
  28. }
  29.  
  30. void paisaje(int num, int& ant, unsigned& a, unsigned& b, bool& subida, bool& p_bajo){
  31. if(ant==0){
  32. ant = num;
  33. a++;
  34. b++;
  35. }else if((num<ant)&&(num!=0)&&(!p_bajo)){
  36. ant = num;
  37. a++;
  38. b++;
  39. }else if((num<ant)&&(num!=0)&&(p_bajo)){
  40. p_bajo = false;
  41. b = 2;
  42. a++;
  43. ant = num;
  44. }else if((num>ant)&&(!subida)&&(num!=0)&&(!p_bajo)){
  45. a = 2;
  46. b++;
  47. ant = num;
  48. subida = true;
  49. p_bajo = true;
  50. }else if((num>ant)&&(subida)&&(num!=0)&&(p_bajo)){
  51. a++;
  52. b++;
  53. ant = num;
  54. }
  55. }

Si pudiérais darme alguna pista o consejo para intentar simplificarlo un poco, os lo agradecería  :D
En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
bigfu

Desconectado Desconectado

Mensajes: 49



Ver Perfil WWW
Re: Reto Universidad [C++].
« Respuesta #28 en: 5 Agosto 2011, 14:34 pm »

Primer post actualizado con los ejercicios del tema 3 (último tema de la asignatura). Estar tarde pondré las soluciones de los 4 o 5 primeros ejercicios, que ya los tengo.

Saludos!
En línea

A reader lives a thousand lives before he dies. The man who never reads lives only one
PiroskY

Desconectado Desconectado

Mensajes: 76


пирожки


Ver Perfil
Re: Reto Universidad [C++].
« Respuesta #29 en: 5 Agosto 2011, 19:03 pm »

No podes usar memoria dinámica para ese ultimo?

Me parece que seria mucho mas fácil y limpio si podes buscar las cosas una vez que tenes todos los números.
En línea

Páginas: 1 2 [3] 4 5 6 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Desafios de la universidad
Desafíos - Wargames
carlos.soriano 2 8,577 Último mensaje 9 Diciembre 2014, 00:34 am
por Samg
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines