Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Resolver 10 números siguiente a una serie en C++

Estas en el tema de Resolver 10 números siguiente a una serie en C++ en el foro de C/C++ en Foros del Web. Buenas, me gustaría saber si alguien es capaz de resolver este problema porque la verdad me está costando mucho y me hace aprobar una asignatura: ...
  #1 (permalink)  
Antiguo 01/06/2011, 08:03
 
Fecha de Ingreso: junio-2011
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Resolver 10 números siguiente a una serie en C++

Buenas, me gustaría saber si alguien es capaz de resolver este problema porque la verdad me está costando mucho y me hace aprobar una asignatura:

El juego consiste en encontrar los 10 siguientes numeros que siguen a la lista de 1000 numeros proporcionada, los numeros se han generado mediante un sistema afin similar al de la rutina rand() de la libreria estandar del C en la implementacion de visual C++.

Ficheros necesarios

Fichero con los 1000 primeros numeros de la seriee

http://www.megaupload.com/?d=0UD3KGWL
(Tamaño 6.54 KB)
Ahí están los 1000 números generados aleatoriamente y tengo que dar los 10 siguientes. El profesor me ha dicho que la base está en que actúa como un registro desplazador de 32 bits.

Si alguien los tiene por favor agradecería muchísimo me ayudarais con esto.
Gracias.
  #2 (permalink)  
Antiguo 02/06/2011, 08:41
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Resolver 10 números siguiente a una serie en C++

¿Has hecho algo? ¿El qué? Este foro es para resolver dudas, no para hacer los deberes a nadie
  #3 (permalink)  
Antiguo 07/06/2011, 09:50
 
Fecha de Ingreso: junio-2011
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Resolver 10 números siguiente a una serie en C++

He hecho algo,y mucho.El tema consiste en que mi profe ha cambiado las semillas de la función rand() por default para generar los números aleatorios y pueden ser un valor entre 1 y 2^32.La rutina te da 15 bits de 32 bits de la serie y los desplaza.He probaro el algoritmo de berlekamp-massey en mathlab y en .c y me he creado un código que averigua la semilla pero es un proceso muy lento:
#include "stdio.h"
#include "math.h"

long comprobar(long posicion,long num){

long lista[1000];
long i=0;

if(lista[0]!=17678){
FILE * f;

f=fopen("afin.txt","r");
while(!feof(f) && i<10){
fscanf(f,"%ld",&lista[i]);


printf("lista[%ld]:%ld\n",i,lista[i]);
i++;
}
fclose(f);

}


if (lista[posicion]==num)
return 1;
else
return 0;
}

void main(int argc,char *argv[]){
long m=3;
long a;
long c;
long x;

int j,ska;

//La estamos peinando

long inicialA=1L;
long finalA=(inicialA<<31)-1;

long inicialC=1;
long finalC=(inicialC<<10);

printf("Datos iniciales:\n");
printf("A irá de %ld a %ld\n",inicialA,finalA);
printf("C irá de %ld a %ld\n",inicialC,finalC);

for(c=inicialC;c<=finalC;c++){
if (c%100==0)
printf("\n\nc:%ld\n",c);
for(a=inicialA;a<=finalA;a++){
//printf("\na:%ld\n",a);
j=0;
ska=0;
x=17678;
//Este while es para comprobar si se están hallando los números de la serie
while(j<8 && ska==0){
if (comprobar(j,x)==1){
j++;
//Con 7 coincidencias terminaría... (habría q poner 1000 y tal)
if (j==7){
ska=88;
printf("Cerdo a la vista!!=)\n");
printf("a:%ld\n",a);
printf("c:%ld\n\n",c);
}
else if (j>2){
printf("Coincidencias:%d\n",j);

}
}
else{
//Esto es para salir del while si no coincide con el nº de la serie!
ska=1;
}
//El algoritmo del tipo!
x=((a*x+c)>>16)&0x7fff;
}
}
}

printf("Esto ha acabado, fijate cuanto ha tardado porq el definitivo sería 4000 veces más\n\n");
printf("Risas!\n");
}

"afin.txt" es un texto con los 1000 números de la serie.
  #4 (permalink)  
Antiguo 07/06/2011, 10:04
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 7 meses
Puntos: 71
Respuesta: Resolver 10 números siguiente a una serie en C++

Hola:

Debe de indicar que parte te da problemas para estimar una solución.
No pretenda que alguien te dará su valioso tiempo en hacer el deber que te corresponde.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #5 (permalink)  
Antiguo 07/06/2011, 10:16
 
Fecha de Ingreso: junio-2011
Mensajes: 3
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Resolver 10 números siguiente a una serie en C++

No sé como optimizar el problema para que no tenga que hacer el barrido de 1 a 2^32 ya que tardaría años en encontrar la semilla.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:22.