2014-01-18 3 views
0

저는 cpp 프로그래밍에 익숙하지 않으며, stackoverflow에 초보입니다.한 번에 하나의 임의의 숫자를 취하려고 시도합니다.

나는 간단한 상황과 해결하기에 더 많은 시간이 걸리는 문제가 있으므로 여기에 물어볼 것이라고 생각했습니다.

한 번에 rand()에서 한 자릿수를 가져 가고 싶습니다. 나는 그 숫자를 없애 버렸지 만 배열 인덱스로 사용되기 때문에 내가 필요로하는 int으로 변환 할 수 없다.

아무도 도와 줄 수 있습니까? 나는 감사하고 싶다.

또한 누군가가 10 진수의 난수를 균등하게 분배하는 좋은 해결책을 가지고 있다면 나는 그것을 원한다. 그걸 가지고있어.

+2

C++ 11을 사용 하시겠습니까? 'std :: uniform_int_distribution'을 사용하여 임의의 범위를 생성 해 보겠습니다. – tabstop

답변

3

KTM 그럼 당신은 무엇 번호 랜드 반환의 자리를 얻기 위해 나머지 연산자를 사용할 수 있습니다.

int digit = rand()%10; 

첫 번째 질문에 대해서는 문자 숫자가있는 경우 숫자를 얻기 위해 '0'값을 뺄 수 있습니다.

int digit = char_digit - '0'; 
+2

이 솔루션은 일부 (작은) 편향을 기꺼이 받아 들일 것으로 가정합니다. http://ericlippert.com/2013/12/16/how-much-bias-is-introduced-by-the-remainder-technique/ –

3

하나

  1. rand() 가정 수 0 일 9의 현학적 고른 분포를 원한다면 자체가 고르게 분포되어있다. (항상 좋은 가정은 아닙니다.)

  2. 다시 rand()으로 전화하십시오.

    int ran10(void) { 
        const static int r10max = RAND_MAX - (RAND_MAX % 10); 
        int r; 
        while ((r = rand()) >= r10max); 
        return r%10; 
    } 
    

예 :
경우 RAMD_MAXr10max는 32767-32760가 던져 얻을 것이다 범위 32760. 모든 랜드 값의 값을 가질 것이며, 새로운 임의의 값을 가져 오기위한 것이다, 32767이었다.

관련 문제