//C++로 시작하는 객체지향 프로그래밍 p.328 예제 7.15 - 로커퍼즐(Locker Puzzle)
/* 학교에 ㅔ100개의 로커와 100명의 학생이 있다. 모든 로커는 개학 첫 날에는 닫혀 있다.
학생이 교실로 들어가면서 S1이라는 첫 번째 학생은 모든 로커를 연다.
두 번째 학생 S2는 두 번째 로커 L2부터 시작하여 하나씩 건너뛰면서 로커를 닫는다.
학생 S3은 세 번째 로커 L3부터 시작하여 세 번째 로커마다 상태를 변경한다(열린 것은 닫고, 닫힌 것은 연다.).
학생 S4는 L4부터 시작하여 네 번째 로커마다 로커의 상태를 변경한다.
학생 S5는 L5부터 시작하여 다섯 번째 로커마다 로커의 상태를 변경한다.
이 작업은 학생 S100이 L100 로커를 변경할 때까지 계속된다.
모든 학생이 교실을 통과하고 나간 다음, 어떤 로커가 열려 있을까?
모든 열려 있는 로커 번호를 출력하는 프로그램을 작성하여라. 처음에 모든 로커는 닫혀 있다.*/
#include <iostream>
using namespace std;
const int NUMBER_OF_LOCKER = 100;
bool lockers[NUMBER_OF_LOCKER]; //라커의 상태를 갖는 변수
int main() {
for(int i = 0; i < NUMBER_OF_LOCKER; i++) {
lockers[i] = false; // 모든 라커가 닫혀 있는 상태
}
//학생마다 라커 상태를 변경시킨다.
for (int j = 1; j <= NUMBER_OF_LOCKER; j++){ //j = 학생 번호
//라커 수
for (int i = j - 1; i < NUMBER_OF_LOCKER; i += j){ // i = 라커 번호
lockers[i] = !lockers[i];
}
}
//어떤 라커가 열려있는지 찾는다
for(int i = 0; i < NUMBER_OF_LOCKER; i++) {
if (lockers[i])
cout << "Locker " << (i + 1) << "is open" << endl;
}
system("pause");
return 0 ;
}
댓글 없음:
댓글 쓰기