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

C++ में आसन्न तत्वों के अंतर का अधिकतम योग

समस्या विवरण

इस समस्या में, हमें एक संख्या N दी गई है। हमारा कार्य C++ में आसन्न तत्वों के अंतर का अधिकतम योग खोजने के लिए एक प्रोग्राम बनाना है।

हम सभी क्रमपरिवर्तन सरणियों के आसन्न तत्वों के बीच निरपेक्ष अंतर का अधिकतम योग ढूंढेंगे।

उदाहरण

इनपुट

N = 4

आउटपुट

7

व्याख्या

आकार 4 के सभी क्रमपरिवर्तन:
{1, 2, 3, 4} = 1 + 1 + 1 = 3
{1, 2, 4, 3} = 1 + 2 + 1 = 4
{1, 3, 2, 4} = 2 + 1 + 2 = 5
{1, 3, 4, 2} = 2 + 1 + 2 = 5
{1, 4, 2, 3} = 3 + 2 + 1 = 6
{1, 4, 3, 2} = 3 + 1 + 1 = 5
{2, 1, 3, 4} = 1 + 2 + 1 = 4
{2, 1, 4, 3} = 1 + 3 + 1 = 5
{2, 3, 1, 4} = 1 + 2 + 3 = 6
{2, 3, 4, 1} = 1 + 1 + 3 = 5
{2, 4, 1, 3} = 2 + 3 + 2 = 7
{2, 4, 3, 1} = 2 + 1 + 2 = 5
{3, 1, 2, 4} = 2 + 1 + 2 = 5
{3, 1, 4, 2} = 2 + 3 + 2 = 7
{3, 2, 1, 4} = 1 + 1 + 3 = 5
{3, 2, 4, 1} = 1 + 2 + 3 = 6
{3, 4, 1, 2} = 1 + 3 + 1 = 5
{3, 4, 2, 1} = 1 + 2 + 1 = 4
{4, 1, 2, 3} = 3 + 1 + 1 = 5
{4, 1, 3, 2} = 3 + 2 + 1 = 6
{4, 2, 1, 3} = 2 + 1 + 2 = 5
{4, 2, 3, 1} = 2 + 1 + 2 = 5
{4, 3, 1, 2} = 1 + 2 + 1 = 4
{4, 3, 2, 1} = 1 + 1 + 1 = 3

समाधान दृष्टिकोण

इस प्रकार की समस्या को हल करने के लिए, हमें क्रमपरिवर्तन के सामान्य योग का सूत्र ढूंढना होगा।

विभिन्न N मानों के लिए आसन्न तत्वों के अंतर के अधिकतम योग के कुछ मान यहां दिए गए हैं:

N = 2, maxSum = 1
N = 3, maxSum = 3
N = 4, maxSum = 7
N = 5, maxSum = 11
N = 6, maxSum = 17
N = 7, maxSum = 23
N = 8, maxSum = 31

यह योग N + N पदों के योग की तरह दिखता है।

maxSum = S(N) + F(N) जहां S(N) = n(n-1)/2, और F(N) N का एक अज्ञात फलन है।

S(N), maxSum(N) का उपयोग करके F(N) ढूंढें:

F(2) = 0
F(3) = 0
F(4) = 1
F(5) = 1
F(6) = 2
F(7) = 2
F(8) = 3

यहां से, हम व्युत्पन्न कर सकते हैं कि F(N) = Int(N/2 - 1) है। F(N) N के हर दूसरे मान के लिए बढ़ता है और प्रारंभ में 2 और 3 के लिए शून्य होता है।

इससे maxSum का सूत्र बनता है:

maxSum = N(N-1)/2 + N/2 - 1
maxSum = N(N-1)/2 + N/2 - 2/2
maxSum = ( N(N-1) + N - 2 )/2
maxSum = ( N^2 - N + N - 2 )/2
maxSum = (N^2 - 2)/2

इस सूत्र का उपयोग करके, हम N के किसी भी दिए गए मान के लिए maxSum मान ढूंढ सकते हैं।

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

#include <iostream>
using namespace std;

int calcMaxSumofDiff(int N){
    int maxSum = 0;
    maxSum = ((N*N) - 2) / 2;
    return maxSum;
}

int main(){
    int N = 13;
    cout<<"The maximum sum of difference of adjacent elements is "<<calcMaxSumofDiff(N);
    return 0;
}

आउटपुट

The maximum sum of difference of adjacent elements is 83
  1. सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++ सर्कुलर ऐरे में अधिकतम योग जहाँ कोई दो आसन्न तत्व न हों - C++

    इस समस्या में, हमें एक सर्कुलर ऐरे cirArr[] दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में सर्कुलर ऐरे में अधिकतम योग ढूंढे जहाँ कोई दो आसन्न तत्व न हों।समस्या विवरणसर्कुलर ऐरे के लिए, हमें ऐरे के तत्वों का अधिकतम योग ढूंढना है जहाँ आसन्न तत्वों को नहीं लिया जा सकता, यानी हमें वैकल्पिक तत

  1. - C++ में 3 गैर-ओवरलैपिंग सबएरे का अधिकतम योग (Maximum Sum of 3 Non-Overlapping Subarrays)

    मान लीजिए हमारे पास nums नामक एक ऐरे है जिसमें धनात्मक पूर्णांक हैं, हमें अधिकतम योग वाले तीन गैर-ओवरलैपिंग सबएरे ज्ञात करने हैं। यहां प्रत्येक सबएरे का आकार k होगा, और हम सभी 3*k प्रविष्टियों के योग को अधिकतम करना चाहते हैं।हमें परिणाम को प्रत्येक अंतराल की प्रारंभिक स्थिति को दर्शाने वाले सूचकांको

  1. - C++ में K-संयोजन अधिकतम योग

    मान लीजिए हमारे पास एक पूर्णांक सरणी arr और एक पूर्णांक k है, हमें सरणी को k बार दोहराकर बदलना है। इसलिए यदि arr = [1, 2] और k = 3 तो संशोधित सरणी [1, 2, 1, 2, 1, 2] होगी।अब हमें संशोधित सरणी में अधिकतम उप-सरणी योग ढूंढना है। ध्यान दें कि उप-सरणी की लंबाई 0 हो सकती है और उस स्थिति में इसका योग 0 है।