एक खरीद में एक मुफ्त स्थिति मिलती है, यह गणना करना आसान है, बस 2 से विभाजित करना है जो हम चाहते हैं (उदा: 3 खरीदें 3 मुफ्त में प्राप्त करें, इसलिए हमें 6 मिलता है)।

लेकिन जब यह अधिक जटिल हो जाता है, जैसे कि 4 खरीदें 1 मुफ्त में प्राप्त करें, तो सबसे अच्छा खरीदारी विकल्प क्या होगा यदि हम 13 खरीदना चाहते हैं (जवाब 11 खरीदना है क्योंकि आपको 2 मुफ्त में मिलते हैं)? मुझे यह दिलचस्प लगा कि गणना करना आसान है, लेकिन इसे कोड में रखने के लिए, मैं खो गया हूं।

खरीदें 4 में 1 निःशुल्क प्राप्त करें, यह वह पैटर्न है जो मुझे मिला, लेकिन फिर से, मुझे कोई सुराग नहीं है कि इसे वास्तव में कोड में कैसे रखा जाए।

मूल रूप से, मैं "एक्स एक्स प्राप्त एक्स फ्री" तैयार करना चाहता हूं, इसलिए जब किसी दिए गए स्थिति में, यह सबसे अच्छा खरीद विकल्प आउटपुट करेगा। उदाहरण, अगर मैं उनमें से 13 खरीदना चाहता हूं, तो यह "11" आउटपुट करेगा।

the quantity we need:    we only need to buy:    what we end up having:

          1                        1                       1
          2                        2                       2
          3                        3                       3
          4                        4                       5
          5                        4                       5
          6                        5                       6
          7                        6                       7
          8                        7                       8
          9                        8                       10
         10                        8                       10
         11                        9                       11
         12                       10                       12
         13                       11                       13
         14                       12                       15
         15                       12                       15
          .                        .                        .
          .                        .                        .
          .                        .                        .
-1
moomoochen 5 पद 2018, 11:03

1 उत्तर

सबसे बढ़िया उत्तर

यह बहुत सीधा है: आप यह जानना चाहते हैं कि आपको कितने पूर्ण पैक और कितने गैर-पैक आइटम प्राप्त करने की आवश्यकता है। अभिन्न विभाजन आसान है।

def buy_to_acquire(desired, buy=1, free=0):
    pack = buy + free
    buy_packs = desired // pack
    buy_individual = desired % pack
    return buy * buy_packs + buy_individual

buy_to_acquire(13, buy=4, free=1)
# => 11

वैकल्पिक संस्करण को समझना उतना आसान नहीं है, लेकिन यह कंप्यूटर के लिए थोड़ा तेज़ है:

import math
def buy_to_acquire(desired, buy=1, free=0):
    return math.ceil(desired * buy / (buy + free))
3
Amadan 5 पद 2018, 08:25