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

C++ प्रोग्राम दिए गए अनुक्रम में विशिष्ट तत्वों को खोजने के लिए

मान लीजिए हमें तीन पूर्णांक n, x, y, और z दिए गए हैं। हमें दिए गए पूर्णांकों से एक अनुक्रम बनाना है जहां अनुक्रम का पहला आइटम (x मॉड्यूलो 2^31) है। पहले तत्व के अलावा, अनुक्रम में अन्य तत्व a_i = (a_(i-1) * y + z) मॉड्यूलो 2^31 हैं, जहां 1 ≤ i ≤ n - 1। हमें बनाए गए अनुक्रम में विशिष्ट पूर्णांकों की संख्या ढूंढनी है।

तो, यदि इनपुट n = 5, x = 1, y = 2, z = 1 है, तो आउटपुट 5 होगा।

अद्वितीय मान हैं {1, 3, 7, 15, 31}। तो, उत्तर 5 है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे:

  • MOD := 2^31
  • एक सरणी temp परिभाषित करें
  • सरणी temp का आकार MOD के मान पर बदलें
  • p := x mod MOD
  • temp[p] := true
  • ans := 1
  • i := 1 से प्रारंभ करें, जब i < n, अपडेट करें (i को 1 से बढ़ाएं), करें:
    • p := ((p * y) + z) mod MOD
    • यदि temp[p] सत्य है, तो:
      • लूप से बाहर आएं
    • ans को 1 से बढ़ाएं
    • temp[p] := true
  • ans लौटाएं

उदाहरण

बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें:

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

const long long MOD = 2147483648;

int solve(int n, long long x, long long y, long long z) {
    vector<bool> temp;
    temp.resize(MOD);
    long long p = x % MOD;
    temp[p] = true;
    int ans = 1;
    for (int i = 1; i < n; ++i) {
        p = ((p * y) + z) % MOD;
        if (temp[p])
            break;
        ++ans;
        temp[p] = true;
    }
    return ans;
}

int main() {
    cout << solve(5, 1, 2, 1) << endl;
    return 0;
}

इनपुट

5, 1, 2, 1

आउटपुट

5
  1. ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम ग्राफ में सुपर वर्टेक्स खोजने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स वाला एक ग्राफ दिया गया है। वर्टेक्स 1 से n तक संख्याबद्ध हैं और edges सरणी में दी गई एज्स से जुड़े हैं। प्रत्येक वर्टेक्स का एक x मान है जो 1 से n के बीच होता है, यह values सरणी में दिया गया है। हमें ग्राफ में सुपर वर्टेक्स खोजने हैं। एक वर्टेक्स i को सुपर वर्टेक्स कहा जाता है

  1. ग्रिड में रोशन सेल्स की संख्या ज्ञात करने का C++ प्रोग्राम ग्रिड में रोशन सेल्स की संख्या ज्ञात करने का C++ प्रोग्राम

    मान लीजिए h × w आयाम का एक ग्रिड दिया गया है। ग्रिड की सेल्स में बल्ब या बाधाएँ हो सकती हैं। एक बल्ब सेल स्वयं और अपने दाएँ, बाएँ, ऊपर, नीचे की सेल्स को रोशन करता है। प्रकाश सेल्स के माध्यम से चमकता है जब तक कि कोई बाधा सेल इसे न रोक दे। बाधा सेल न तो रोशन हो सकती है और न ही प्रकाश को गुजरने देती ह

  1. दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम दिए गए ग्राफ में ब्रिज एज की संख्या ज्ञात करने का C++ प्रोग्राम

    मान लीजिए n वर्टेक्स और m एज वाला एक अनभारित, निदेश रहित ग्राफ दिया गया है। ग्राफ में एक ब्रिज एज वह एज है जिसे हटाने से ग्राफ असंबद्ध हो जाता है। हमें दिए गए ग्राफ में ऐसी एज की संख्या ज्ञात करनी है। ग्राफ में समानांतर एज या सेल्फ-लूप नहीं हैं। उदाहरण के लिए, यदि इनपुट है n = 5, m = 6, edges = {{1