2014-09-27 5 views
0

기본적으로 저는 정말로 전형적인 문제가 있습니다. 이전에 stackoverflow에서 몇 가지 해결책을 찾았지만, 실제로 도움이되지 않았습니다.파이썬에서 두리스트를 이스케이프 처리합니다.

나는 bobsleigh 팀을 분석해야하는 학교 과제가 있습니다. 나는 3 개의 분리 된 명부에있는 그들의 이름, 그들의 등급 및 무게가 있고 나는 4 개의 경쟁자를 뽑을 필요가있다 최상 등급 및 그들의 무게 합계는 325 킬로그램 이상이면 안된다. 이미 내가 한 것은 for주기를 만들어 가장 높은 등급의 경쟁자 4 명을 골라 내었지만, 높은 평점을 가질 수는 있지만 325kg을 초과하는 체중이 될 수 있다는 점입니다.

["Name1","Name2","Name3","Name4","Name5","Name6","Name7","Name8"] ## names 
[1,2,3,4,5,6,7,8] ##ratings 
[50,60,70,80,90,100,110,120] ##weights 

내가 무엇을 얻을 것은 [5,6,7,8] (그리고 그들의 모든 하나 하나가 체중 목록과 이름 목록을 따라, 평점 5에 대한 예를 들어 90kg 이름의 무게 경쟁을 간다있다 : 예를 들어 나는 세 가지 목록이 이름 5)이지만 합산 된 무게는 325kg (90 + 100 + 110 + 120> 325)보다 높습니다.

최소한의 요소 (5)가 제거되고 다른 하위 요소 ,하지만 문제는 (마지막으로 요소를 바꾸는 것만으로는 충분하지 않아 문제가 발생 함으로서 어떻게해야할지 모릅니다) 요소 6을 대체하고 요소 5를 제 위치에 유지해야합니다.

오른쪽 이제 전환에 대한 코드는 :

while (kaalude_summa > 325): #if weight is over 325 kg 
    positsioon = reiting.index(max(reiting)) #position for max rating 
    if kaalud[positsioon] < kaalude_tulemused[3]: #two lists - one is for elements not in the resulting list (kaalud) and one is for the elements in resulting list (kaalude_tulemused) 
     kaalude_tulemused[3] = kaalud[positsioon] #sets new weight in result list 
     tulemuslist.remove(min(tulemuslist)) #removes number 5 from example list [5,6,7,8] (check above) 
     tulemuslist.append(max(reiting)) #adds number 4 from example list 
     kaalude_summa = kaalude_summa - vahekaal + kaalude_tulemused[3] #new calculated weight 
    reiting.remove(max(reiting)) #removes element from list [1,2,3,4] 
    kaalud.remove(kaalud[positsioon]) 

이 평가 1,2,3 또는 4 무게 + 다른 세 개의 무게 (6,7,8)과의 경쟁만큼되지 작동

나는 2 개의 for 루프를 가지고 어떻게 든 할 수 있다고 생각하지만, 나는 3 번 시도하고 비참하게 실패했다.

우리 학교에서는 에스토니아어로 코드를 작성해야하므로 영어로 쓰지 않는 것에 대해 사과드립니다.

나는 정말로 내가 쓰는 것이 읽기 쉽고 당신이 나를 도울 수 있기를 바란다. 미리 감사드립니다.

+0

http://pastebin.com/1JPKqUbh는 어떻게되는지에 대한 나의 설명이 충분히 명확하지 않은 경우 전체 코드를 pastebin에 추가했습니다. – charen

답변

1

무차별 대항 방안은 4 개의 sledders의 가능한 모든 조합을 찾는 것입니다. 각각에 대해 결합 된 가중치를 찾아서 나머지 325를 초과하는 것을 버리십시오. 가장 높은 등급을 가진 것을 선택하십시오.

+0

옵션이지만 불행히도 우리는이 무차별 공격을 감당할 수 없으며 정상적인 시간대에 코드가 작동해야하므로 두 개의 루프가 더 좋습니다. – charen

+0

영어로 공부하는 방법을 설명하는 방법을 모르지만 다음과 같습니다. http://stackoverflow.com/questions/16555978/example-of-a-factorial-time-algorithm-on 지수가되어야합니다 (cn). – charen

0

이 문제를 해결하기위한 하나의 옵션은 이후에 더 많은 시간을 넣는 것입니다. IT는 여전히 파괴 가능하지만 모든 위치에서 요소를 확인합니다.

while (kaalude_summa > 325): #AGA KUI JUHTUB SEE NALI, ET MAX REITINGUD LIIDETAKSE JA IKKA ON PAKSUD 
    if reiting == []: 
     break 
    positsioon = reiting.index(max(reiting)) #max reitingu positsioon 
    if kaalud[positsioon] < kaalude_tulemused[3]: 
     kaalude_tulemused[3] = kaalud[positsioon] 
     tulemuslist.remove(min(tulemuslist)) 
     tulemuslist.append(max(reiting)) 
     kaalude_summa = kaalude_summa - vahekaal + kaalude_tulemused[3] 
    reiting.remove(max(reiting)) 
    kaalud.remove(kaalud[positsioon]) 

if kaalude_summa > 325: 
    reiting = reiting_safecopy[0:len(reiting_safecopy)] 
    tulemuslist = tulemuslist_safecopy[0:len(tulemuslist_safecopy)] 
    kaalud = kaalud_safecopy[0:len(kaalud_safecopy)] 

while (kaalude_summa > 325): #KUI ESIMENE WHILE EI AIDANUD 
    if reiting == []: 
     break 
    positsioon = reiting.index(max(reiting)) #max reitingu positsioon 
    if kaalud[positsioon] < kaalude_tulemused[2]: 
     kaalude_tulemused[2] = kaalud[positsioon] 
     tulemuslist.remove(min(tulemuslist)) 
     tulemuslist.append(max(reiting)) 
     kaalude_summa = kaalude_summa - vahekaal + kaalude_tulemused[3] 
    reiting.remove(max(reiting)) 
    kaalud.remove(kaalud[positsioon]) 

if kaalude_summa > 325: 
    reiting = reiting_safecopy[0:len(reiting_safecopy)] 
    tulemuslist = tulemuslist_safecopy[0:len(tulemuslist_safecopy)] 
    kaalud = kaalud_safecopy[0:len(kaalud_safecopy)] 

while (kaalude_summa > 325): #KUI TEINE WHILE KA EI AIDANUD 
    if reiting == []: 
     break 
    positsioon = reiting.index(max(reiting)) #max reitingu positsioon 
    if kaalud[positsioon] < kaalude_tulemused[1]: 
     kaalude_tulemused[1] = kaalud[positsioon] 
     tulemuslist.remove(min(tulemuslist)) 
     tulemuslist.append(max(reiting)) 
     kaalude_summa = kaalude_summa - vahekaal + kaalude_tulemused[3] 

    reiting.remove(max(reiting)) 
    kaalud.remove(kaalud[positsioon]) 

if kaalude_summa > 325: 
    reiting = reiting_safecopy[0:len(reiting_safecopy)] 
    tulemuslist = tulemuslist_safecopy[0:len(tulemuslist_safecopy)] 
    kaalud = kaalud_safecopy[0:len(kaalud_safecopy)] 

while (kaalude_summa > 325): #SIIS VAHETAME VIIMAST ELEMENTI!! 
    if reiting == []: 
     break 
    positsioon = reiting.index(max(reiting)) #max reitingu positsioon 
    if kaalud[positsioon] < kaalude_tulemused[0]: 
     kaalude_tulemused[0] = kaalud[positsioon] 
     tulemuslist.remove(min(tulemuslist)) 
     tulemuslist.append(max(reiting)) 
     kaalude_summa = kaalude_summa - vahekaal + kaalude_tulemused[3] 

    reiting.remove(max(reiting)) 
    kaalud.remove(kaalud[positsioon]) 
관련 문제