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

दिए गए शब्द में i-वें अक्षर के (i-1)-वें, i-वें, या (i+1)-वें अक्षर होने वाले शब्दों की गणना करने का C++ प्रोग्राम

समस्या विवरण

हमें एक स्ट्रिंग str दी गई है। लक्ष्य उन शब्दों की गणना करना है जिनकी लंबाई str के बराबर हो और जिनमें प्रत्येक स्थिति i पर का अक्षर मूल स्ट्रिंग के (i-1)-वें, i-वें, या (i+1)-वें अक्षर से मेल खाता हो।

  • पहले अक्षर के लिए: स्थान i या i+1 से प्रतिस्थापन
  • अंतिम अक्षर के लिए: स्थान i-1 या i से प्रतिस्थापन
  • मध्य अक्षरों के लिए: स्थान i-1, i, या i+1 से प्रतिस्थापन

उदाहरण

इनपुट: str = "TPP"

आउटपुट: 4

व्याख्या:

  • T को T (i-वाँ) या पहला P (i+1-वाँ) से प्रतिस्थापित करना = TPP, PPP
  • पहले P को T (i-1-वाँ), P (i-वाँ), या दूसरा P (i+1-वाँ) से प्रतिस्थापित करना = TTP, TPP, TPP
  • दूसरे P को पहला P (i-1-वाँ) या स्वयं (i-वाँ) से प्रतिस्थापित करना = TPP, TPP
  • अद्वितीय संयोजन: TPP, PPP, TTP, PTP

इनपुट: str = "aaa"

आउटपुट: 1

व्याख्या: सभी प्रतिस्थापन "aaa" ही देते हैं।

दृष्टिकोण

प्रत्येक अक्षर के लिए हमारे पास तीन संभावनाएँ होती हैं। यदि वर्तमान अक्षर i के लिए (i-1)-वाँ, i-वाँ, और (i+1)-वाँ सभी अलग-अलग हैं, तो हमारे पास 3 विकल्प हैं। यदि दो समान हैं तो 2 विकल्प, यदि तीनों समान हैं तो केवल 1 विकल्प।

हम स्ट्रिंग को पार करते हैं और अद्वितीयता की जाँच करते हुए 3, 2, या 1 से गुणा करते हैं। पहले और अंतिम अक्षर के लिए, हम 2 या 1 से गुणा करते हैं।

एल्गोरिदम

  1. स्ट्रिंग str को कैरेक्टर ऐरे के रूप में लें
  2. फंक्शन total(char str[], int length) गणना लौटाता है
  3. प्रारंभिक गणना = 1 (मूल शब्द)
  4. यदि लंबाई 1 है, तो 1 लौटाएँ
  5. पहले अक्षर (इंडेक्स 0) की जाँच करें: यदि str[0] == str[1] तो 1 से गुणा करें, अन्यथा 2 से
  6. दूसरे से अंतिम से पहले अक्षर तक लूप करें (इंडेक्स 1 से length-2):
    • यदि तीनों समान हैं तो 1 से गुणा करें
    • यदि कोई दो समान हैं तो 2 से गुणा करें
    • अन्यथा 3 से गुणा करें
  7. अंतिम अक्षर की जाँच करें: यदि str[len-1] == str[len-2] तो 1 से गुणा करें, अन्यथा 2 से
  8. गणना लौटाएँ

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

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

int total(char str[], int length) {
    int count = 1;
    if (length == 1) return count;
    
    if (str[0] == str[1]) count *= 1;
    else count *= 2;
    
    for (int j = 1; j < length - 1; j++) {
        if (str[j] == str[j-1] && str[j] == str[j+1]) count *= 1;
        else if (str[j] == str[j-1]) count *= 2;
        else if (str[j] == str[j+1]) count *= 2;
        else if (str[j-1] == str[j+1]) count *= 2;
        else count *= 3;
    }
    
    if (str[length - 1] == str[length - 2]) count *= 1;
    else count *= 2;
    
    return count;
}

int main() {
    char str[] = "TPP";
    int length = strlen(str);
    cout << "Count: " << total(str, length) << endl;
    return 0;
}

आउटपुट

Count: 4
  1. C++ में क्रमबद्ध डबल लिंक्ड सूची में दिए गए योग x वाले ट्रिपलेट की गिनती C++ में क्रमबद्ध डबल लिंक्ड सूची में दिए गए योग x वाले ट्रिपलेट की गिनती

    समस्या विवरण एक क्रमबद्ध डबल लिंक्ड सूची दी गई है जिसमें पूर्णांक मान हैं। लक्ष्य उन ट्रिपलेट को ढूंढना है जिनका योग दिए गए मान x के बराबर है। यदि इनपुट लिंक्ड सूची 3-4-1-2 है और x 6 है तो गिनती 1 होगी (ट्रिपलेट (3,1,2))। उदाहरण इनपुट linked list: [3-4-13-5-10-10-0] x=20 आउटपुट दिए गए योग x वाले

  1. C++ में क्रमबद्ध डबल लिंक्ड सूची में दिए गए गुणनफल x वाले ट्रिपलेट की गिनती C++ में क्रमबद्ध डबल लिंक्ड सूची में दिए गए गुणनफल x वाले ट्रिपलेट की गिनती

    समस्या विवरण एक क्रमबद्ध डबल लिंक्ड सूची दी गई है जिसमें पूर्णांक मान हैं। लक्ष्य उन ट्रिपलेट को ढूंढना है जिनका गुणनफल दिए गए मान x के बराबर है। यदि इनपुट लिंक्ड सूची 3-4-1-2 है और x 6 है तो गिनती 1 होगी (ट्रिपलेट (3,1,2))। उदाहरण इनपुट linked list: [200-4-16-5-10-10-2] x=200 आउटपुट दिए गए गुणनफ

  1. दो BSTs से योग x वाले नोड जोड़ों की गणना - C++ दो BSTs से योग x वाले नोड जोड़ों की गणना - C++

    समस्या विवरण हमें दो बाइनरी सर्च ट्री (BST) और एक मान x दिया गया है। लक्ष्य उन नोड जोड़ों की गणना करना है जहाँ एक नोड पहले BST से और दूसरा दूसरे BST से हो, और उनके डेटा का योग x के बराबर हो। उदाहरण आउटपुट: 1 (जोड़ी: 8+6=14) आउटपुट: 2 (जोड़ियाँ: 5+15=20, 4+16=20) दृष्टिकोण पहले BST को इनऑर्डर (छोटे