2009-03-07 10 views
-2

구매 금액에서 변경 금액 (분기, 십센트, 센트 및 페니)을 파악하는 가장 효율적인 방법을 찾고 있습니다. 구매 금액은 1 달러 미만이어야하며 변경 금액은 1 달러입니다. 얼마나 많은 쿼터, 다 이아, 센트, 동전이 누군가를 되 찾을 지 알아야합니다.Python 함수 : 구매 금액에서 변경 찾기

사전을 설정하는 것이 가장 좋습니까?

+0

숙제는 질문에 태그를 다른 해결책? – alexpopescu

+0

예, 숙제 문제입니다.하지만 가장 효과적인 방법은 제가 찾으려고하는 것입니다. 모든 사람들이 재귀 메소드에 투표하고있는 것으로 보입니다. 재귀 메소드는 루프 메소드보다 배가 고픈 프로세스입니다. –

+0

배가 고프세요? 얼마나 많은 동전 종류가 당신과 함께 일하고 있습니까? –

답변

0

가장 좋은 방법은 아마도 동전 크기의 사전을 정렬 한 다음 변경 사항이 값보다 큰지 확인하고 그 동전을 추가하고 값을 빼거나 그렇지 않으면 그 다음 행으로 이동하는 것입니다. 사전.

예는

Coins = [50, 25, 10, 5, 2, 1] 
ChangeDue = 87 
CoinsReturned = [] 
For I in coins: 
    While I >= ChangeDue: 
     CoinsReturned.add(I) 
     ChangeDue = ChangeDue - I 

이 내 형편 파이썬 구문을 용서. 계속하기 만하면되기를 바랍니다.

+0

은 i> = changeDue가되어야합니다. – Triptych

+0

그래야합니다. 그 삼부작을 가져 주셔서 감사합니다. –

+0

목록에 아무 것도 없습니다. CoinsReturned.append (i) –

7

이런, 모든 프로그래밍 과정에서 문제가되지 않는다는 것을 의미합니까? 어쩌면 사람들은 더 이상 변화를 줄 수있는 방법을 사람들에게 가르쳐주지 않는 것 같습니다. (또는 아마도 그들은 : 숙제가 있습니까?)

약 50 세 이상의 사람을 찾고 변화시켜 주면, 다음과 같이 작동합니다. 당신이 $ 3.52에 대한 수표를 가지고 있고 계산원에게 twnty를 건네 준다고 가정 해보십시오. 그들은 (3.55)

  • 다시 계산하는 2 센트 (3.60, 3.65)
  • "셋 넷, 다섯"을 말하고, 다시

    • 수를 세 개의 동전을 한 후 "세 쉰두"말함으로써 변화를 만들어 줄게 다시
    • 계산 센트 (3.75)
    • 분기 (4 달러)
    • 달러 지폐 (5 달러)
    • $ 5 법안 (10 달러)
    • $ 10 법안 (이십.)

    그건 재귀 적 과정입니다. 즉 현재 액수와 다음 액면가가 균등하게 나올 때까지 현재 액면 금액을 계산합니다. 그런 다음 다음 종파로 이동하십시오.

    물론 위와 같이 반복적으로 수행 할 수 있습니다.

    4

    이 꽤 빨리 아마 - 교단마다 몇 가지 작업 :

    def change(amount): 
        money =() 
        for coin in [25,10,5,1] 
         num = amount/coin 
         money += (coin,) * num 
         amount -= coin * num 
    
        return money 
    
    0

    이 문제는 정수론의 정수 파티션이 아주 쉽게 해결 될 수있다. 나는 숫자와 파티션 목록을 취하고 주어진 숫자를 구성 할 수있는 가능한 조합의 수를 반환하는 재귀 함수를 작성했습니다.

    http://sandboxrichard.blogspot.com/2009/03/integer-partitions-and-wiki-smarts.html

    그것은 당신이 원하는하지 정확히 무엇 있지만 쉽게 결과를 얻기 위해 수정할 수 있습니다.

    +0

    그것이 OP가 추구하는 것이 아니라는 것을 확신합니다 : 링크는 404입니다. –

    0

    위의 soloution 작업.

    amount=int(input("Please enter amount in pence")) 
    coins = [50, 25, 10, 5, 2, 1] 
    coinsReturned = [] 
    for i in coins: 
        while amount >=i: 
         coinsReturned.append(i) 
         amount = amount - i 
    print(coinsReturned) 
    

    또는 바닥 및 mod 기능을 사용하여 해결할 수 있습니다.

    amount = int(input("Please enter amount in pence")) 
    # math floor of 50 
    fifty = amount // 50 
    # mod of 50 and floor of 20 
    twenty = amount % 50 // 20 
    # mod of 50 and 20 and floor of 10 
    ten = amount % 50 % 20 // 10 
    # mod of 50 , 20 and 10 and floor of 5 
    five = amount % 50 % 20 % 10 // 5 
    # mod of 50 , 20 , 10 and 5 and floor of 2 
    two = amount % 50 % 20 % 10 % 5 // 2 
    # mod of 50 , 20 , 10 , 5 and 2 and floor of 1 
    one = amount % 50 % 20 % 10 % 5 % 2 //1 
    
    print("50p>>> " , fifty , " 20p>>> " , twenty , " 10p>>> " , ten , " 5p>>> " , five , " 2p>>> " , two , " 1p>>> " , one) 
    

    또는

    amount=int(input("Please enter the change to be given")) 
    endAmount=amount 
    
    coins=[50,25,10,5,2,1] 
    listOfCoins=["fifty" ,"twenty five", "ten", "five", "two" , "one"] 
    change = [] 
    
    for coin in coins: 
        holdingAmount=amount 
        amount=amount//coin 
        change.append(amount) 
        amount=holdingAmount%coin 
    
    print("The minimum coinage to return from " ,endAmount, "p is as follows") 
    for i in range(len(coins)): 
        print("There's " , change[i] ,"....", listOfCoins[i] , "pence pieces in your change")