2017-03-14 1 views
0

C과 다른 숫자를 생성하고 싶습니다. stdlib 라이브러리와 srand 함수를 사용하여 난수를 생성 할 수 있습니다.서로 일치하지 않는 임의의 숫자

예 :

2 
4 
4 
1 

이걸 어떻게 방지 할 수 있습니다

:이 here.Like를 일치 수 0

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

int main(void) 
{ 
int i; 
int n = 4; 
int array[3]; 

srand(time(NULL)); 

for(i = 0; i < n; i++) 
{ 
    array[i] = rand() % 5; 
    printf("%d\n", array[i]); 
} 
return 0; 

5. 그러나 같은 숫자 사이의 난수를 생성하려면?

+3

을 ];'->'int array [4];' – 4386427

+4

당신이 그것들을 유일하게하기를 원한다면, 값 0..5로 배열을 채운 다음, 예를 들어 그것을 섞는다. fisher-yates http://stackoverflow.com/questions/6127503/shuffle-array-in-c –

+2

같은 숫자가 연속적으로 두 번 나타나기 때문에 그것이 무작위가 아니라는 것을 의미하지는 않습니다. – dbush

답변

0

은 아마 당신이 뭔가를 사용할 수 있습니다

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

int main(void) 
{ 
    int i; 
    int n = 4; 
    int array[4]; 

    // Fill an array with possible values 
    int values[5] = {0, 1, 2, 3, 4}; 

    srand(time(NULL)); 

    for(i = 0; i < n; i++) 
    { 
     int t1 = rand() % (5-i); // Generate next index while making the 
            // possible value one lesser for each 
            // loop 

     array[i] = values[t1];  // Assign value 
     printf("%d\n", array[i]); 

     values[t1] = values[4-i]; // Get rid of the used value by 
            // replacing it with an unused value 
    } 
    return 0; 
} 
-1

대신 임의의 숫자의 당신은 이전 번호로 임의 비 제로 전환 생성 할 수 있습니다 :`int 배열 [3 : 주제의

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

int myrand() { 
     static int prev = -1; 
     if (prev < 0) 
       prev = rand() % 5; 
     prev = (prev + 1 + rand() % 4) % 5; 
     return prev; 
} 

int main(void) { 
     int i; 
     for (i = 0; i < 20; i++) 
       printf("%d\n", myrand()); 
} 
+0

흥미 롭습니다. BTW는 오버플로를 방지하기 위해'else prev = (prev + 1u + rand() % 4) % 5; ' – chux

+0

@chux 어디에서 오버플로를 사용할 수 있습니까? Prev는 항상 0과 4 사이입니다. – avysk

+0

사실, 예방 아이디어는 5가 아닌 일반적인 경우에 대한 것이고, 일부는 긍정적 인 'int'입니다. 'else prev = (prev + 1u + rand() % (N-1)) % N;' – chux