저는 스스로 공부하고 있습니다 MIT Open Courseware Introduction to Computer Science and Programming입니다. Problem Set 2은 치킨 너겟 상자 (6, 9 또는 20)의 합계를 계산하는 것에 기초한 디오 판틴 방정식을 포함합니다.디오 판틴 방정식을 파이썬에서 자체 목록에 반복하십시오.
알고리즘을 만들려고 생각한 방식은 막대 (막대)에 측정 값 (크기)이 표시되고 다른 조각으로 옮겨지는 가상 측정 막대를 만드는 것과 같았습니다.
숫자 라인에서 사용되었다고 상상했다면 초기 값을 지적 할 것입니다. 여기서 그 지점을 표시하고 영점을 처음 발견 한 지점으로 이동시켜 새로운 값을 만듭니다 표시하고 반복하며 항상 앞으로 나아갑니다.
그래서, 합계의 수식을 가지고 : x=0
, a=x+6
, 각 지금과 같은 목록에 추가 얻을 b=x+9
, c=x+20
: [6,9,20]
합니다. 그 다음 내가하고 싶은 일은 x
이 목록에서 다음으로 큰 값으로 전환하여 목록에 추가 된 다른 변수에 대한 새 값을 만듭니다. x
의 다음 값은 6
이되어 다른 변수가 변경되고 결과는 [6,9,20,12,15,26]
과 같은 목록이됩니다. 그런 다음 9
, 등등.
내 첫 번째 문제는 중복되어 무한 루프가 발생하는 목록의 순서입니다. 나는 목록에 다시 돌아온 목록 집합을 만든 행을 추가하여이를 수정했습니다. 이것은 대부분 효과가있었습니다.
그러나 여기에 문제가 있으며 가능한 모든 값으로 목록을 채우지 않습니다. 예를 들어 48을 목록에 넣지는 않았지만 6의 분명한 배수입니다.
내 생각에 내 문제는 내가 지속적으로 편집중인 목록을 반복한다는 사실과 관련이 있다는 것입니다. /에 추가됩니다.
알고리즘을 사용하여 과제를 재 설계 할 수 있다는 것을 알고 있습니다. 연구를했기 때문에 다른 사람들이이 문제에 대한 답을 코딩 한 방법을 보았고, 지금은 이해하지만 여전히 내 자신의 문제를 해결하고 싶습니다. 문제에 대한 해결책을 프로그래밍하는 방법. 반복이 기본 컬렉션이 변경되지 기대 때문에
## Name some initial variables in diophantine equations
x=0
a, b, c= x+6, x+9, x+20
## Create a list to catch values, aka fish
fish = [a,b,c]
## Here goes
while x <= 60:
for i in fish:
x = i
fish = list(sorted(fish))
a, b, c= x+6, x+9, x+20
## option to see what its doing
print x,a,b,c
## catch the values into the list
fish.append(a)
fish.append(b)
fish.append(c)
## get rid of duplicate numbers in the list
fish = list(set(fish))
a, b, c= x+6, x+9, x+20
else:
print fish
## Create new list of values NOT caught by the equation
lastMissingFish = list(set(range(0,50))-set(fish))
## Print the last number not reached by the equation
print lastMissingFish [-1]
문제 자체를 게시 할 수 있습니까? – Blender
@Blender 문제는 6, 9 및 20의 정수 배수로 생성 할 수있는 모든 숫자를 출력하고 있다고 생각합니다. – Patashu
@Blender : 문제 세트에 대한 링크를 추가하기 위해 질문을 편집했습니다. –