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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Serie Fibonacci C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Serie Fibonacci C++  (Leído 22,182 veces)
Manimecker

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Serie Fibonacci C++
« en: 16 Enero 2012, 08:05 am »

Buenas noches, un saludo muy grande a toda la comunidad de elhacker.net y vengo de nuevo yo con un problema relacionado a la programación.

Tengo el siguiente problema:
Citar
Problema
Escribe un programa que imprima en pantalla todos los números enteros positivos estrictamente menores que N que NO pertenezcan a la serie de Fibonacci.

Entrada
Tu programa deberá de leer del un solo número entero 2<=N<=30000 (30 mil)

Salida
Tu programa deberá imprimir en pantalla todos los números enteros positivos menores que N que no formen parte de la serie de Fibonacci, deberá imprimirlos en orden creciente, separados por espacios.

Ejemplo

Entrada
9
Salida
4 6 7

Básicamente, es un programa que imprima los números menores de N que no pertenezcan a la serie Fibonacci.

Hice el siguiente código:
Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int num, fb=0, n=0, p=1, i=1;
  6.    scanf("%d", &num);
  7.    while (fb < num) {
  8.        fb=n+p;
  9.        n=p;
  10.        p=fb;
  11.        if (i != p)
  12.            printf("%d ", i);
  13.        i++; }
  14. }

Input:
Citar
9

Output
Citar
4 5 6


Pero simplemente no entiendo por qué no funciona, sé que es un problema de lógica mío, pero no lo veo.

Gracias de antemano y disculpen la molestia.

Debe ser tan fácil, pero no he podido averiguarlo.


« Última modificación: 16 Enero 2012, 08:07 am por Manimecker » En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Serie Fibonacci C++
« Respuesta #1 en: 16 Enero 2012, 15:13 pm »

Para empezar falta realizar la validación del numero introducido por el usuario.

El programa no funciona correctamente ya que en cada iteracion del bucle calculas el siguiente numero de la serie fibonacci, ello solo debes hacerlo cuando alcances ese numero (al imprimir los números entre este y el anterior).

El programa corregido:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(void)
  5. {
  6.   long num;
  7.   long i;
  8.   long a;
  9.   long b;
  10.   long aux;
  11.  
  12.   scanf("%ld", &num);
  13.  
  14.   a = 3;
  15.   b = 5;
  16.   for (i = 4; i < num; i++)
  17.      if (i != b)
  18.         printf(" %ld", i);
  19.      else {
  20.         aux = a + b;
  21.         a = b;
  22.         b = aux;
  23.      }
  24.   putchar('\n');
  25.  
  26.   return EXIT_SUCCESS;
  27. }

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Xandrete

Desconectado Desconectado

Mensajes: 210



Ver Perfil
Re: Serie Fibonacci C++
« Respuesta #2 en: 16 Enero 2012, 20:46 pm »

¡Hola! Me gustaría añadir otra solución al problema ^^

Que conste que desde en un principio lo hubiera hecho como rir3760 , pero ya que él lo ha hecho ya así, aporto algo diferente.

Esta solución es más ineficiente en términos de memoria, pero es "más C++".

Código
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int main() {
  6. int n,i,j;
  7. cin >> n;
  8. vector<bool> isFib(n);
  9. i = j = 1;
  10. while (j <= n) {
  11. isFib[j-1] = true;
  12. int aux = i;
  13. i = j;
  14. j += aux;
  15. }
  16. for (i = 0; i < n; ++i)
  17. if (not isFib[i]) cout << i + 1 << endl;
  18. }

Y otra, sin vectores:

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main() {
  5. int n,i,j;
  6. cin >> n;
  7. i = j = 1;
  8. while (j <= n) {
  9. for (int k = i+1; k < j; ++k)
  10. cout << k << endl;
  11. int aux = i;
  12. i = j;
  13. j += aux;
  14. }
  15. for (int k = i+1; k < n; ++k)
  16. cout << k << endl;
  17. }

Saludos.
« Última modificación: 16 Enero 2012, 21:03 pm por Xandrete » En línea

Manimecker

Desconectado Desconectado

Mensajes: 47



Ver Perfil
Re: Serie Fibonacci C++
« Respuesta #3 en: 16 Enero 2012, 22:34 pm »

Muchas gracias a Xandrete y a rir3760, me dieron una idea con sus códigos de cómo debía ser el código e implemente el siguiente, el cual es muy parecido al de rir3760:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int num, fb, n=1, p=1, i;
  6.    scanf("%d", &num);
  7.    while (num<2 || num>30000)
  8.        scanf("%d", &num);
  9.    for (i=1; i<num; i++) {
  10.        if (i != p)
  11.            printf("%d ", i);
  12.        else {
  13.            fb=n+p;
  14.            n=p;
  15.            p=fb; } }
  16.    return 0;
  17. }
  18.  

Muchas gracias, Xandrete, esta tarde estudiaré tu código ya que me pareció un tanto confuso (sobretodo el primero, por algunas cosas que aún no aprendo).

Muchas gracias a ambos!

Salu2 y suerte.

EDIT---

He mandado mi código a evaluación, y me reporta que en el caso 1 existe un 'Error de ejecución o tiempo de espera agotado' y en los 4 casos restantes la respuesta es correcta.

¿Cuál será el problema?

PD: No tengo los casos que prueban al programa.
« Última modificación: 16 Enero 2012, 22:56 pm por Manimecker » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Secuencia fibonacci
Java
Erik# 7 16,656 Último mensaje 1 Octubre 2008, 18:04 pm
por Sk9ITk5Z
Mi primer script Vbs!! La serie de Fibonacci!!
Scripting
WiZZard 0 5,549 Último mensaje 22 Agosto 2010, 05:35 am
por WiZZard
Ayuda Serie de Fibonacci en RadAsm+Masm32
ASM
JuanElias 0 5,098 Último mensaje 20 Noviembre 2010, 00:03 am
por JuanElias
FIBONACCI « 1 2 »
Programación C/C++
JOSE23 12 15,443 Último mensaje 24 Febrero 2011, 00:09 am
por RyogiShiki
¿Un acumulador para sumar la serie fibonacci?
Programación C/C++
Exorcista12 2 3,822 Último mensaje 17 Enero 2014, 06:48 am
por Exorcista12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines