Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Python

पायथन में n लोगों द्वारा फ्लिप किए गए ऑन लाइट्स की संख्या गिनने का प्रोग्राम

मान लीजिए हमारे पास एक संख्या n है, मान लें एक कमरे में n टॉगल स्विच हैं और उस कमरे में n लोग मौजूद हैं, वे निम्नानुसार स्विच फ्लिप करते हैं:

  • व्यक्ति 1 आता है और सभी स्विच फ्लिप करता है।
  • व्यक्ति 2 आता है और 2 के गुणक वाले स्विच फ्लिप करता है: 2, 4, 6, ...
  • व्यक्ति i आता है और i के गुणक वाले स्विच फ्लिप करता है। इसी तरह।

हमें अंत में ऑन पोजीशन में रहने वाले स्विच की संख्या ढूंढनी है।

उदाहरण के लिए, यदि इनपुट है n = 5, तो आउटपुट 2 होगा, क्योंकि प्रारंभ में बल्ब [0, 0, 0, 0, 0] हैं।

  • खिलाड़ी 1 के बाद: [1, 1, 1, 1, 1]
  • खिलाड़ी 2 के बाद: [1, 0, 1, 0, 1]
  • खिलाड़ी 3 के बाद: [1, 0, 0, 0, 1]
  • खिलाड़ी 4 के बाद: [1, 0, 0, 1, 1]
  • खिलाड़ी 5 के बाद: [1, 0, 0, 1, 0]

अंत में 2 लाइट्स ऑन स्टेट में हैं।

मुख्य अंतर्दृष्टि

एक स्विच उतनी बार फ्लिप होता है जितने उसके डिवाइजर होते हैं। केवल पूर्ण वर्ग संख्याओं के डिवाइजर की संख्या विषम होती है। इसलिए उत्तर floor(sqrt(n)) है।

एल्गोरिदम (बाइनरी सर्च)

  1. l := 0, r := n
  2. while l <= r:
    • mid := l + (r - l) // 2
    • यदि mid * mid <= n < (mid + 1)^2, तो mid लौटाएं
    • अन्यथा यदि n < mid^2, तो r := mid
    • अन्यथा, l := mid + 1

उदाहरण कार्यान्वयन

def solve(n):
    l, r = 0, n
    while l <= r:
        mid = l + (r - l) // 2
        if mid * mid <= n < (mid + 1) * (mid + 1):
            return mid
        elif n < mid * mid:
            r = mid
        else:
            l = mid + 1

n = 5
print(solve(n))  # आउटपुट: 2

इनपुट

5

आउटपुट

2
  1. पायथन में प्रत्येक ब्रैकेट गहराई में वर्णों की संख्या गिनने का प्रोग्राम पायथन में प्रत्येक ब्रैकेट गहराई में वर्णों की संख्या गिनने का प्रोग्राम

    मान लीजिए हमारे पास एक स्ट्रिंग s है जिसमें केवल तीन वर्ण X, ( , और ) हैं। स्ट्रिंग में संतुलित ब्रैकेट हैं और बीच में कुछ X हैं साथ ही संभवतः नेस्टेड ब्रैकेट भी पुनरावर्ती रूप से हो सकते हैं। हमें s में ब्रैकेट की प्रत्येक गहराई पर X की संख्या ढूंढनी है, सबसे उथली गहराई से सबसे गहरी गहराई तक शुरू क

  1. पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम पायथन में ऐरे में x से बड़े सभी वैल्यूज को फ़िल्टर करने का प्रोग्राम

    मान लीजिए हमारे पास nums नामक संख्याओं की सूची है। हमारे पास x नामक एक और संख्या भी है। हमें nums से उन सभी नंबरों को फ़िल्टर करके ढूंढना है जो x से कम हैं। पायथन में filter() मेथड होता है जो फंक्शन को आर्गुमेंट के रूप में लेता है और इस फंक्शन का उपयोग करके फ़िल्टर करता है। तो, यदि इनपुट nums = [1,5

  1. बाइनरी ट्री में पथ जिनका योग k हो, उनकी संख्या गिनने का पायथन प्रोग्राम बाइनरी ट्री में पथ जिनका योग k हो, उनकी संख्या गिनने का पायथन प्रोग्राम

    मान लीजिए हमारे पास एक बाइनरी ट्री और एक मान k है, हमें उन अद्वितीय नोड-टू-सबचाइल्ड पथों की संख्या ढूंढनी है जिनका योग k के बराबर है। उदाहरण के लिए, यदि इनपुट इस तरह है: और k = 5, तो आउटपुट 2 होगा, क्योंकि पथ हैं [2, 3] और [1, 4]। इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे: count := एक मैप