문제

하나의 단일 문의 숫자 세트에서 C ++로 임의의 숫자를 인쇄 할 수 있습니까?

세트가 {2, 5, 22, 55, 332}이라고 가정 해 봅시다.

나는 rand ()를 찾았지만 단일 진술에서 할 수 있다고 의심 스럽다.

도움이 되었습니까?

해결책

이 숫자가 크기 5 세트에 있다고 가정 해 봅시다. rand () 메소드가 0에서 1 사이의 임의 값을 반환한다고 가정하면 5를 동일하게 곱한 후 정수에 캐스트하면 0에서 4 사이의 장비 값을 얻을 수 있습니다.

나는 C ++의 구문을 모른다. 그러나 이것이 어떻게 보이는지입니다

my_rand_val = my_set[(int)(rand()*arr_size)]

여기서 rand ()는 0과 1 사이의 값을 반환하는 메소드라고 가정합니다.

다른 팁

int numbers[] = { 2, 5, 22, 55, 332 };
int length = sizeof(numbers) / sizeof(int);
int randomNumber = numbers[rand() % length];

무의식적으로 물건을 단일 표현으로 바꾸는 것은 실제로 3 원 운영자의 것이 었습니다. 발명 (LITB의 화합물 진술 속임수가 없음) :

std::cout << ((rand()%5==0) ? 2 : 
              (rand()%4==0) ? 5 : 
              (rand()%3==0) ? 22 : 
              (rand()%2==0) ? 55 : 
              332
             ) << std::endl;

제 코드 검토 자에게 쥐어 내지 마십시오.

아, 여기 우리는 적절한 균일 분포를 간다 (가정 rand() 범위에서 균일합니다.

반복 진술이지만 여러 문을 포함하는 큰 큰 블록이있는 루프도 마찬가지입니다. 구문은 구별되지 않습니다. 이것은 실제로 두 가지 진술을 포함합니다. 모든 것은 진술이며, 모든 것은 for(...) 부분은 진술입니다. 따라서 아마도 "단일 진술"은 단일 표현식 진술을 의미합니다. 하지만 어쨌든 :

// weasel #1: #define for brevity. If that's against the rules,
// it can be copy and pasted 7 times below.
#define CHUNK ((((unsigned int)RAND_MAX) + 1) / 5)

// weasel #2: for loop lets me define and use a variable in C++ (not C89)
for (unsigned int n = 5*CHUNK; n >= 5*CHUNK;)
    // weasel #3: sequence point in the ternary operator
    ((n = rand()) < CHUNK) ? std::cout << 2 << "\n" :
             (n < 2*CHUNK) ? std::cout << 5 << "\n" :
             (n < 3*CHUNK) ? std::cout << 22 << "\n" :
             (n < 4*CHUNK) ? std::cout << 55 << "\n" :
             (n < 5*CHUNK) ? std::cout << 332 << "\n" :
             (void)0;
             // weasel #4: retry if we get one of the few biggest values
             // that stop us distributing values evenly between 5 options.

이것이 전체 프로그램에서 유일한 코드가 될 것이고 매번 같은 값을 반환하는 것을 원하지 않으면 전화해야합니다. srand(). 다행히도 이것은 장착 할 수 있습니다. 첫 번째 줄을 다음과 같이 변경하십시오.

for (unsigned int n = (srand((time(0) % UINT_MAX)), 5*CHUNK); n >= 5*CHUNK;)

이제 다시는 말하지합시다.

예, 가능합니다. 그다지 직관적이지는 않지만 요청했습니다.

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

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

    int randomNumber = ((int[]) {2, 5, 22, 55, 332})[rand() % 5];

    std::cout << randomNumber << std::endl;

    return 0;
}    

"단일 진술"기준은 매우 모호합니다. 하나의 기계 명령, 하나의 stdlib 호출을 의미합니까?

하나의 기계 명령을 의미한다면 특수 하드웨어가없는 대답은 아닙니다.

하나의 기능 호출을 의미한다면 물론 가능합니다. 원하는 것을 수행하기 위해 간단한 기능을 작성할 수 있습니다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int setSize = 5;
    int set[] = {2, 5, 22, 55, 332 };
    srand( time(0) );

    int number = rand() % setSize;
    printf("%d %d", number, set[number]);
    return 0;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top