짝수 홀수를 선택할 수 있도록 생성자를 가진 SelectableRandom 클래스를 작성하고 각각 짝수 10개, 홀수 10개를 랜덤하게 발생시키는 프로그램을 작성하라.
#include
#include
#include
using namespace std;
class SelectableRandom {
public:
SelectableRandom(); //짝수, 홀수를 선택할 수 있는 생성자들
int nextEven();
int nextEvenInRange(int a, int b);
int nextOdd();
int nextOddInRange(int a, int b);
};
SelectableRandom::SelectableRandom(){ // 랜덤함수 생성
srand((unsigned)time(0)); // 매 번 다른 랜덤수를 발생시키기 위한 seed 설정
}
int SelectableRandom::nextEven() { // 랜덤 리턴
return rand() / 2 * 2; // /2를 하면 int형 이기 때문에 소수점이하가 버려진다. 다시 *2를 해서 짝수만 남게 된다.
}
int SelectableRandom::nextEvenInRange(int a, int b) {
return (rand() % (b - a + 1) + a) / 2 * 2; //a~b까지 랜덤
}
int SelectableRandom::nextOdd() { // 랜덤 리턴
return rand() / 2 * 2 +1; // /2 *2로 짝수화 시킨 후 +1을 해주면 홀수가 된다.
}
int SelectableRandom::nextOddInRange(int a, int b) {
return (rand() % (b - a + 1) + a) / 2 * 2 +1; //a~b까지 랜덤
}
int main() {
SelectableRandom r;
cout << "-- 0에서 " << RAND_MAX << "까지의 랜덤 정수 10개 --" << endl; // RAND_MAX(32767)
for (int i = 0; i < 10; i++) { // 10개의 랜덤 정수 발생
int n = r.nextEven();
cout << n << " ";
}
cout << endl << endl << "-- 2에서 9까지 랜덤 정수 10개 --" << endl;
for (int i = 0; i < 10; i++) { // 2~10까지 10개의 랜덤 정수 발생
int n = r.nextOddInRange(2, 9);
cout << n << " ";
}
cout << endl;
}