돌 빼 기 게임 (HDU 256) 피 폴 라 치 게임

돌 뽑 기 놀이
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3818    Accepted Submission(s): 2279
Problem Description
한 무더기 의 돌 은 n 개가 있 는데, 두 사람 이 번갈아 가 며 가 져 간다. 선 취 자 는 첫 번 째 로 여러 개 를 가 져 갈 수 있 지만, 다 가 져 갈 수 는 없다. 이후 매번 가 져 온 돌 수 는 지난번 취 자 수의 2 배 를 초과 해 서 는 안 된다.이 긴 사람 이 이 깁 니 다. 먼저 이 긴 사람 은 "Second win" 을 출력 합 니 다. 먼저 이 긴 사람 은 "First win" 을 출력 합 니 다.
 
Input
여러 그룹 을 입력 하 십시오. 각 그룹의 첫 번 째 줄 은 2 < = n < 2 ^ 31. n = 0 으로 종료 합 니 다.
 
Output
선 취자 마이너스 출력 "Second win". 선 취자 승 출력 "First win". 
샘플 출력 참조.
 
Sample Input

   
   
   
   
2 13 10000 0

 
Sample Output

   
   
   
   
Second win Second win First win

 
제목 대의: 돌 한 무더기, 두 사람 이 돌아 가면 서 가 져 가 마지막 자가 이 기 는 것 을 기억 하 라.돌 을 가 는 규칙 은 먼저 n 개의 돌 을 가 지 는 것 이지 만 한꺼번에 다 가 질 수 있 는 지, 그 다음 에 두 사람 이 돌 을 가 지 러 갈 때 매번 돌 을 가 는 개 수 는 전번 의 2 배 보다 많 지 않다.
문제 풀이 방향: 먼저 앞의 몇 가지 데 이 터 를 열거 한 결과 돌 개수 가 피 보 나 계 수 였 을 때 필 패 였 고 피 보 나 계 수 는 패 자 였 을 것 으로 추정 된다.
#include"iostream"
#include"cstdio"
using namespace std;
int fib[50];
int Fib(){
	fib[0]=0;
	fib[1]=1;
	for(int i=2;i<48;i++){
		fib[i]=fib[i-1]+fib[i-2];
	}
	return 0;
}
int main(){
	int n;
	Fib();
	while(scanf("%d",&n)==1){
		if(n==0)
			break;
		int flag=0;
		for(int i=3;i<48;i++)
			if(n==fib[i]){
				flag=1;
				break;
			}
		if(!flag)
			printf("First win
"); else printf("Second win
"); } return 0; }

좋은 웹페이지 즐겨찾기