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

पहले घटते फिर बढ़ते क्रम वाले क्रमचयों की गणना करने का C++ प्रोग्राम

समस्या विवरण

हमें एक चर num दिया गया है। लक्ष्य संख्याओं [1, num] के उन क्रमचयों की गणना करना है जो पहले घटते हैं फिर बढ़ते हैं।

उदाहरण: num = 3 के लिए संख्याएँ 1,2,3 हैं। वैध क्रमचय: [3,1,2] और [2,1,3]। गणना = 2।

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

हर क्रमचय में घटते से बढ़ते क्रम का परिवर्तन सबसे छोटी संख्या 1 की स्थिति से तय होता है। 1 के बाद संख्याएँ बढ़नी शुरू होती हैं।

  • यदि 1 शुरुआत में है → पूरी तरह बढ़ता क्रम
  • यदि 1 अंत में है → पूरी तरह घटता क्रम
  • वैध क्रमचय के लिए 1 दूसरी से (num-1)वीं स्थिति के बीच होना चाहिए

गणितीय सूत्र

num = 4 के लिए:

  • 1 को दूसरी स्थिति में रखें: 3C1 = 3 तरीके
  • 1 को तीसरी स्थिति में रखें: 3C2 = 3 तरीके
  • कुल = 6

सामान्यतः: count = x-1C1 + x-1C2 + ... + x-1Cx-2 = 2x-1 - 2

उदाहरण

इनपुट: num = 4 → आउटपुट: 6

इनपुट: num = 6 → आउटपुट: 30

दृष्टिकोण

द्विपद प्रमेय का उपयोग करके सीधे सूत्र 2^(num-1) - 2 से गणना करें। मॉड्यूलो 109+7 का उपयोग करें।

C++ कार्यान्वयन

#include <bits/stdc++.h>
using namespace std;

const int MOD = 1000000007;

long long power(long long base, long long exp) {
    long long result = 1;
    while (exp > 0) {
        if (exp & 1) result = (result * base) % MOD;
        base = (base * base) % MOD;
        exp >>= 1;
    }
    return result;
}

int permutations_increase_decrease(int num) {
    if (num == 1) return 0;
    int count = (power(2, num - 1) - 2 + MOD) % MOD;
    return count;
}

int main() {
    int num = 4;
    cout << "Count: " << permutations_increase_decrease(num);
    return 0;
}

आउटपुट

Count: 6
  1. - C++ में बाइनरी ऐरे को पार्टीशन करने के लिए न्यूनतम टॉगल (पहले 0s फिर 1s)

    समस्या कथन केवल 0 और 1 वाले n पूर्णांकों का एक ऐरे दिया गया है। न्यूनतम टॉगल (0 से 1 या इसके विपरीत स्विच) ढूंढें ताकि ऐरे पार्टीशन हो जाए, यानी, उसमें पहले 0s फिर 1s हों। उदाहरण यदि arr[] = {1, 0, 0, 1, 1, 1, 0} तो 2 टॉगल आवश्यक हैं यानी पहले 1 और अंतिम 0 को टॉगल करें। एल्गोरिदम यदि हम प्रश्न क

  1. - C++ में सख्ती से घटते सबएरे की गिनती ढूंढें

    1 के सख्ती से घटते सबएरे की कुल संख्या ढूंढनी है। तो यदि A = [100, 3, 1, 15]। तो घटते क्रम हैं [100, 3], [100, 3, 1], [15] तो आउटपुट 3 होगा। क्योंकि तीन सबएरे मिले हैं। विचार लंबाई l के सबएरे को ढूंढना और परिणाम में l(l - 1)/2 जोड़ना है। उदाहरण #include using namespace std; int countSubarrays(

  1. - C++ में पहले बढ़ती फिर घटती सरणी में अधिकतम तत्व ज्ञात करें

    मान लीजिए हमारे पास एक सरणी है, जो शुरू में बढ़ती है फिर घटती है। हमें सरणी में अधिकतम मान ढूंढना है। इसलिए यदि सरणी तत्व A = [8, 10, 20, 80, 100, 250, 450, 100, 3, 2, 1] की तरह हैं, तो आउटपुट 450 होगा। हम इसे हल करने के लिए बाइनरी सर्च का उपयोग कर सकते हैं। तीन शर्तें हैं: जब मध्य अपने दोनों आसन्न