햄스터가 한마리 있습니다.(새끼는 무조건 암컷만 낳고 이 햄스터도 암컷입니다.)
이 햄스터는 태어난 지 두달 후부터 새끼를 낳고 한달 간격으로 새끼를 낳습니다.
그러니까 만약 한 햄스터가 태어났다면 2개 월 후에 한 햄스터를 낳고 3개월 후에 또 하나를 낳는다는 소리
입니다.
그리고 이 햄스터는 3마리를 낳으면 죽습니다.
대충 만들어 본 수열은
1 - 2 - 3 - 4 - 6 - 9 - 13 - 19 - 26 .... 입니다.
만약 3마리 낳고도 안 죽을 경우로 하면 피보나치 수열이 나오는데요
1, 2, 3, 5, 8, 13, 21, 34, ....
3마리를 낳고 죽는경우는 정말 애를 써도 안되는군요.
진심 4시간 고민하고도 못한문제입니다. 이거 못 풀면 제 친구들 볼 면목이 없어요...
만약에 이거 푼 분 있으시면
내공 100 백퍼센트 채택해 주겠고 따로 내공 300 더 드리겠습니다.(진심입니다.)
정말 부탁드립니다.
--------------------------------------------------------------------------
음.... 저희 교수님이 내주신 문제랑 비슷하네요
저희 교수님이 내주신건 토끼 한쌍이 새끼를 낳는데 한달이 지나야 새끼를 낳을수있고 꼭 한 쌍의 새끼를 낳는데 세달 후엔 죽는 다는 그런 내용이었죠
그 질문자 님이 푸신것 중에 숫자 하나 잘못 하셔서.... 제가 수형도로 그려보니 수열이
1 1 2 3 4 6 9 13 19 28.... 이 되요
28마리 나올때 4마리가 죽거든요?
보면 fn=f(n-1) + f(n-3) (n>=4)이라는것을 알수있어요
더 정확히 말씀 드리자면 죽는 아이들의 수열을 보여드리면
0 0 0 1 0 1 1 2 2 4 5 8 11 17.....이에요
배치를 좀 섞을게요
1 1 2 3 4 6 9 13 19 28 41 60
0 0 0 1 0 1 1 2 2 4 5
위에는 0개월부터 11개월 까지의 햄스터의 수
아래는 그 사이에 죽은 햄스터의 수에요
사이라는 표현을 쓴 이유는 낳고 죽었기 때문이에요
9 13 19
1 2
를 따로 떼어서 보자면 (9+13)-(1+2)=19라는 것을 알수 있죠 죽는 아이들의 수열도 보시면
짝수항일때 G2n= G(2n-1) + (G2n-3) +1
홀수항일때 G(2n-1)= G(2n-2) +G(2n-4) -1
이라는 것을 알 수 있죠
이 이상 설명 하면 너무 복잡해 지니까
fn=f(n-1) + f(n-3) (n>=4)라는 것만 아시면....
검산까지 마친 결과물은
1 1 2 3 4 6 9 13 19 28 41 60 88 129 189 277 406 ......입니다
푼 시간보다 어떻게 설명해야 할까를 고민한 시간이 더 길어요ㅠㅠ 그러다가 아주 자세한 설명은 포기를ㅠㅠ 무튼 화이팅이요....
--------------------------------------------------------------------------------------
def hamster(n):
hl=[1,0,0,0]
for x in range(n):
c=hl[0]+hl[1]+hl[2]+hl[3]
print c,
k=hl[1]+hl[2]+hl[3]
hl[3]=hl[2]
hl[2]=hl[1]
hl[1]=hl[0]
hl[0]=k
hamster(30)
햄스터 문제를 풀기 위해서 파이썬으로 짜보았습니다.
결과는 다음과 같습니다.
1 2 3 4 6 9 13 19 28 41 60 88 129 189 277 406 595 872 1278 .... 등입니다.
처음에 0개월짜리 1마리 1개월 짜리 0마리 2개월짜리 0마리 3개월 짜리 0마리로 출발합니다.
1개월이 지나면 0개월짜리는 1개월짜리가 되고, 1개월짜리는 2개월짜리가 되고,
2개월짜리는 3개월 짜리가 되고 3개월짜리는 새끼를 낳고 죽습니다.
새로 태어난 새끼의 수는 1개월 짜리, 2개월짜리, 3개월 짜리의 갯수를 더한 것입니다.
이것을 바탕으로 프로그램을 짜서 돌린 것입니다.
위의 답변자의 식이 맞는군요..
1 0 0 0
0 1 0 0
1 0 1 0
1 1 0 1
2 1 1 0 [1]
2 2 1 1 [0]
4 2 2 1 [1]
5 4 2 2 [1]
8 5 4 2 [2]
11 8 5 4 [2]
17 11 8 5 [4]
24 17 11 8 [5]
36 24 17 11 [8]
52 36 24 17 [11]
77 52 36 24 [17]
112 77 52 36 [24]
..........................
'기타 > 컴퓨터공학' 카테고리의 다른 글
웰빙언어 Python (0) | 2012.01.16 |
---|---|
첫 언어로서의 파이썬 (0) | 2012.01.16 |
프로그래밍언어 패러다임 (0) | 2011.12.28 |
프로세스와 쓰레드의 차이 (0) | 2011.12.25 |
프로그램 만드는 프로잭트 과정을 알고싶어요 (0) | 2011.12.25 |