1. 문제

 

4. 문제 3번을 참고하여 짝수 정수만 랜덤하게 발생시키는 EvenRandom 클래스를 작성하고 EvenRandom 클래스를 이용하여 10개의 짝수를 랜덤하게 출력하는 프로그램을 완성하라. 0도 짝수로 처리한다.

 

 

2. 결과

 

 

 

3. 코드

 

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

class EvenRandom {
public :
	EvenRandom() { srand( (unsigned)time(0) ) ;}
	int next();
	int nextInRange(int a, int b);
};
int EvenRandom::next() {
	int n = rand();
	while( n % 2 == 1 ) n = rand();
	return n;
}
int EvenRandom::nextInRange(int a, int b) {
	int n;
	n = a + ( rand() % (b-a+1) );
	while( n % 2 == 1 ) n = a + ( rand() % (b-a+1) );
	return n;
}

int main() {
	EvenRandom r;
	cout << "-- 0에서 " << RAND_MAX << "까지의 랜덤 정수 10 개--" << endl;
	for(int i=0; i<10; i++) {
		int n = r.next();
		cout << n << ' ';
	}
	cout << endl << endl << "-- 2에서 " << "10 까지의 랜덤 정수 10 개 --" << endl;
	for(int i=0; i<10; i++) {
		int n = r.nextInRange(2, 10);
		cout << n << ' ';
	}
	cout << endl;
}

 

4. 설명

 

편의상 문제 3번의 코드를 약간씩만 수정하여서 해결하였습니다.

 

문제 3번과 달리 랜덤한 짝수만을 구하는 것이니 

간단히 랜덤한 수를 구하는 함수 rand()를 int형 변수 n의 저장 후

while( n % 2 == 1 )일 경우 즉, 홀수가 나오지 않을 때까지 n = rand();로 랜덤한 수를 구해주면 됩니다.

 

 

2~10범위의 랜덤한 짝수일 경우도 while문으로 짝수가 나올 때까지 반복하도록하면 됩니다. 
단, 주의하실점은 n = a + ( rand() % (b-a+1) )로 해주셔야 합니다.

 

+ Recent posts