/ / Comprobación de números en C [cerrado] - c

Comprobación de números en C [cerrado] - c

(lo que significa hacer)

Mientras trabajaba en un proyecto "Deal or no deal", realicé una función check (); para verificar si hay dos casos iguales, y si lo son, cambie uno de ellos y vuelva a verificarlo.

La función deal establece números aleatorios para los casos con los premios, y luego llama al cheque ();

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void deal(void);
void check(void);


int cases[22];
int prizes[22]=1,2,3,4,5,6,8,10,15,20,25,35,50,65,85,100,105,135,165,200,250};



int main()
{   int a=0;
deal();
while (a<22){
printf("%d n",cases[a] );
a++;
}

return 0;
}

void deal(void){


srand(time(NULL));
int r;
int n = 1;

while (n <= 22){
r = rand() % 21;
cases[n] = prizes[r];
n++;

}//Ends while loop

check();


}//Ends function

void check(void){
int i = rand() % 21;
int m = 0;
int n = 0;

srand(time(NULL));

while(m < 22){//Nested while loop

while ( n < 22){
if (m == n){
n++;
continue;
} else {
if(cases[m] == cases[n]){

cases[m] = prizes[i];
i = rand() % 21;
continue;
}else{

n++;
continue;

}

}

}//End of inside loop
m++;
n = 0;
}//End of nested loop


}//End function

Sin embargo, imprime los números sin marcar, o no se verifica correctamente. Estoy usando IDE de bloques de código

Gracias por adelantado.

Respuestas

1 para la respuesta № 1

Ya casi llegas, hay un simple (y bastantecomún) algoritmo o haciendo un scramble en una matriz. Con una pasada a través de la matriz puede aleatorizar las posiciones de cada valor sin duplicarlos. La función de verificación no es necesaria ahora debido a la operación de la función de aleatorización.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void deal(void);
void check(void);

int cases[22];
int prizes[22] = {1,2,3,4,5,6,8,10,15,20,25,35,50,65,85,100,105,135,165,200,250};

int main()
{
srand(time(NULL));

int a = 0;
deal();

for(a = 0 ; a < 22 ; a++)
printf("%d n", cases[a]);

return 0;
}

//this is a neat algorithm for re-ordering an array without duplication
void scramble(int* array, int length)
{
int i;
int r;
int temp;

for(i = 0 ; i < length ; i++)
{
//swap this element with a random one to it"s left (or itself)
r = rand() % (i + 1);

temp = array[r];
array[r] = array[i];
array[i] = temp;
}
}

void deal(void)
{
int r;
int n = 1;

//copy the prizes across directly
for(n = 0 ; n < 22 ; n++)
cases[n] = prizes[n];

scramble(cases, 22);
}

Examine la función scramble () en detalle y la encontrará bastante interesante.

Editado para cambiar el algo a una sola pasada según una sugerencia en los comentarios.