Fibonacci sequence

2450 단어 fibonacci
################################################################################
#Question:                                                                     #
#Each new term in the Fibonacci sequence is generated by adding                #
#the previous two terms. By starting with 1 and 2, the first 10 terms will be: #
#                                                                              #
#    1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...                                    #
#                                                                              #
#By considering the terms in the Fibonacci sequence whose values do not exceed #
#four million, find the sum of the even-valued terms                           #
#By IT05 2012-08-14
################################################################################


#one
s = [1,2]
while s[-1]<=4000000:
    s.append(s[-1]+s[-2])
print(sum([i for i in s if i%2==0]))

#two
b = [3,5]
s = [2]
while s[-1]<=4000000:
    s.append(sum(b))
    b = [b[1]+s[-1],b[1]+s[-1]+s[-1]]
s.pop()
print(sum(s))
for i in s:
    if i%2==1:
        s.remove(i)
        print('remove:'+str(i))

처음에는 결과에 맞지 않는 수를 차버리고 싶었지만,
그래서 이 코드를 사용해서 직접 실행하려고 합니다.
print(sum(s))

필요한 결과를 얻을 수 있지만 문제가 생겼다.(먼저 토론하지 않으면 이런 방법은 힘들어서 비위를 맞추지 못한다)
remove () 과정에서 s원조가 바뀌기 때문에 for가 열리면
처음에는 원조s가 변하지 않는다고 가정하였는데, 이것은 유사한 색인을 통해 원조를 읽는 것이다. 비록 이것은 내가
자료를 찾지 못했지만 테스트에서 다음과 같은 규칙이 있습니다.
s = [1,2]
while s[-1]<=4000000:
    s.append(s[-1]+s[-2])
print(s)
# 1
for i in s:
    if i%2==1:
        s.remove(i)
print(s)
# 2
for i in s:
    if i%2==1:
        s.remove(i)
print(s)

마지막 결과는 다음과 같습니다.
[1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987,...]
[2, 5, 8, 21, 34, 89, 144, 377, 610, 1597, 2584, 6765, 10946,...]
[2, 8, 34, 144, 610, 2584, 10946, 46368, 196418, 832040, 3524578]
위의 세 줄이 각각 A, B, C 줄로 명명되었다고 가정하다
그러면 순환 1이 실행될 때 첫 번째 순환에서 1%가 2가 1이 아니라는 것을 발견하고 1을 차버리면 s=[2,3,...]
즉 s[0]=2, 두 번째 순환을 실행할 때 실행 인덱스 1, 즉 이때 i=s[1]에 해당하며 s가 변하지 않으면
좋아요, s[1]는 2예요, 그런데 지금은 3이 됐어요. 그래서 이때 s[1]를 차버릴 거예요. 그래서 s=[2,5,8,...]
세 번째 순환을 실행할 때, 인덱스 2, 즉 i=s[2]에 해당하며, s[2]=8,s 때문에 처리하지 않지만, 우리는
고개를 돌리니 그 5가 몰래 앞으로 달려가 순환이 끝난 뒤 5가 빠졌어요.
나중에 돌이켜 생각해 보니 사실 이렇게 할 필요가 없다. 직접 요구에 부합되는 것을 제기하면 된다!

좋은 웹페이지 즐겨찾기