elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 03:03  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  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 956 veces)
Manimecker

Desconectado Desconectado

Mensajes: 47



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

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
#include <stdio.h>
 
int main()
{
   int num, fb=0, n=0, p=1, i=1;
   scanf("%d", &num);
   while (fb < num) {
       fb=n+p;
       n=p;
       p=fb;
       if (i != p)
           printf("%d ", i);
       i++; }
}

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 por Manimecker » En línea
rir3760


Desconectado Desconectado

Mensajes: 382


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

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
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
  long num;
  long i;
  long a;
  long b;
  long aux;
 
  scanf("%ld", &num);
 
  a = 3;
  b = 5;
  for (i = 4; i < num; i++)
     if (i != b)
        printf(" %ld", i);
     else {
        aux = a + b;
        a = b;
        b = aux;
     }
  putchar('\n');
 
  return EXIT_SUCCESS;
}

Un saludo


En línea

The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Xandrete

Desconectado Desconectado

Mensajes: 195



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

¡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
#include <iostream>
#include <vector>
using namespace std;
 
int main() {
int n,i,j;
cin >> n;
vector<bool> isFib(n);
i = j = 1;
while (j <= n) {
isFib[j-1] = true;
int aux = i;
i = j;
j += aux;
}
for (i = 0; i < n; ++i)
if (not isFib[i]) cout << i + 1 << endl;
}

Y otra, sin vectores:

Código
#include <iostream>
using namespace std;
 
int main() {
int n,i,j;
cin >> n;
i = j = 1;
while (j <= n) {
for (int k = i+1; k < j; ++k)
cout << k << endl;
int aux = i;
i = j;
j += aux;
}
for (int k = i+1; k < n; ++k)
cout << k << endl;
}

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

Desconectado Desconectado

Mensajes: 47



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

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
#include <stdio.h>
 
int main()
{
   int num, fb, n=1, p=1, i;
   scanf("%d", &num);
   while (num<2 || num>30000)
       scanf("%d", &num);
   for (i=1; i<num; i++) {
       if (i != p)
           printf("%d ", i);
       else {
           fb=n+p;
           n=p;
           p=fb; } }
   return 0;
}
 

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 por Manimecker » En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
quiero ejercicios de series para programar ejemplo mostrar la serie de fibonacci
Dudas Generales
asitaka_kintaro 2 800 Último mensaje 28 Enero 2006, 13:55
por BandidoOFF
Serie de fibonacci en Builder C++ ¿? « 1 2 »
Programación C/C++
Odyssea 18 9,305 Último mensaje 29 Octubre 2008, 16:27
por Nakp
Serie Fibonacci en C++ .. « 1 2 3 »
Programación C/C++
Gabiita 34 19,623 Último mensaje 4 Octubre 2009, 07:39
por Gabiita
Mi primer script Vbs!! La serie de Fibonacci!!
Scripting
WiZZard 0 2,007 Último mensaje 22 Agosto 2010, 05:35
por WiZZard
Ayuda Serie de Fibonacci en RadAsm+Masm32
ASM
JuanElias 0 1,821 Último mensaje 20 Noviembre 2010, 00:03
por JuanElias
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines