1에서 7 사이의 균일한 임의의 정수를 생성하는 함수 rand7이 있다고 가정하고 1에서 10까지의 범위에서 균일한 임의의 정수를 생성하는 또 다른 함수 rand10을 작성해야 합니다. 임의의 숫자를 생성하기 위해 일부 라이브러리 함수를 사용할 수 없습니다.
두 개의 난수를 원하므로 [8,10]이 될 수 있습니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- rand40 :=40
- 동안 rand40>=40
- rand40 :=(rand7() - 1) * 7 + (rand7() – 1)
- rand40 모드 10 + 1을 반환
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
예시
#include <bits/stdc++.h> using namespace std; int rand7(){ return 1 + rand() % 7; } class Solution { public: int rand10() { int rand40 = 40; while(rand40 >= 40){ rand40 = (rand7() - 1) * 7 + (rand7() - 1); } return rand40 % 10 + 1; } }; main(){ srand(time(NULL)); Solution ob; cout << (ob.rand10()) << endl; cout << (ob.rand10()) << endl; cout << (ob.rand10()) << endl; }
입력
Call the function three times
출력
2 2 6