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

सी ++ में अंत तक पहुंचने के लिए कूदने के तरीकों की संख्या गिनें


सकारात्मक संख्याओं की एक सरणी को देखते हुए। प्रत्येक तत्व अधिकतम संख्या में छलांग का प्रतिनिधित्व करता है जो उस सूचकांक से सरणी के अंत तक पहुंचने के लिए किया जा सकता है। लक्ष्य यह है कि उस तत्व से अंत तक पहुंचने के लिए कितनी छलांग लगाई जा सकती है। अगर arr[] है [ 1,2,3 ] तो 1 जंप के लिए 1 हो सकता है, 2 जंप के लिए 1 या 2 हो सकता है और 3 जंप के लिए 1, 2 या 3 किया जा सकता है।

उदाहरण के लिए

इनपुट

arr[] = {1,2,3}

आउटपुट

Count of number of ways to jump to reach end are: 1 1 0

स्पष्टीकरण

For 1 we have jumps : 1,
For 2 we have jumps 1 or 2, to reach the end we need just one jump of 1.
For 3 we have jumps 1,2 or 3, as at its end we need no jumps.

इनपुट

arr[] = {4,3,6,2}

आउटपुट

Count of number of ways to jump to reach end are: 4 2 1 0

स्पष्टीकरण

For 4 we have jumps : 1, 2, 3 or 4. To reach the end we need only 1,2 or
3. Ways will be 4−3−6−2, 4−6−2, 4−2, 4−3−2. Total 4. For 3 we have jumps 1, 2 or 3 to reach the end we need both. Ways will be 3−6−2, 3−2. Total 2. For 6 we have jumps 1 to 5, to reach the end we need 1. Ways will be 6−2. Total 1.
For 2 we have jumps 1or 2, as at its end we need no jumps.

नीचे दिए गए कार्यक्रम में उपयोग किया गया दृष्टिकोण इस प्रकार है -

प्रत्येक तत्व गिरफ्तारी [i] के लिए इस दृष्टिकोण में हम उन सभी तत्वों के लिए सरणी के अंत तक पहुंचने के तरीकों की संख्या जोड़ देंगे जो आगे गिरफ्तारी [i] हैं और वर्तमान तत्व से पहुंच योग्य हैं। गिरफ्तारी के तरीकों के लिए इस गिनती में 1 जोड़ें [i] अगर हम सीधे एक ही छलांग में एआर [i] से अंत तक पहुंच सकते हैं।

  • एक पूर्णांक सरणी arr[] लें।

  • फ़ंक्शन पहुंच_एंड (इंट एआर [], इंट साइज) एक सरणी लेता है और अंत तक पहुंचने के लिए कूदने के तरीकों की संख्या देता है।

  • गिरफ्तारी के प्रत्येक तत्व से अंत तक पहुंचने के तरीकों को संग्रहीत करने के लिए arr_2[] सरणी लें []।

  • memset(arr_2, 0, sizeof(arr_2)) का उपयोग करके पूरे arr_2[] को 0 से प्रारंभ करें।

  • i=size-2 से i=0 तक लूप के लिए ट्रैवर्स arr[] का उपयोग करना, क्योंकि अंतिम तत्व पर विचार नहीं किया जाएगा।

  • अस्थायी =आकार - i - 1 लें। यदि temp> =arr[i] तो हम सीधे एक छलांग का उपयोग करके अंत तक पहुंच सकते हैं। arr_2[i]++ का उपयोग करके arr[i] के लिए वृद्धि के तरीके गिने जाते हैं।

  • अब अन्य सभी तत्वों के लिए जो अंत तक पहुँच सकते हैं और जिन तक हम arr[i] से पहुँच सकते हैं, arr_2[i] के तरीकों की संख्या जोड़ें।

  • उपरोक्त ट्रैवर्स के लिए j=i+1 से j

  • यदि अभी भी arr_2[i] 0 है तो इसे -1 पर सेट करें, जिसका अर्थ है कि यह अंत तक नहीं पहुंच सकता।

  • सभी लूपों के अंत में हमारे पास arr_2[] होगा जिसमें arr[] के प्रत्येक तत्व के अंत तक पहुंचने के तरीके होंगे।

  • परिणाम के रूप में लूप के लिए उपयोग करके arr_2 प्रिंट करें।

उदाहरण

#include <bits/stdc++.h>
using namespace std;
void reach_end(int arr[], int size){
   int arr_2[size];
   memset(arr_2, 0, sizeof(arr_2));
   for (int i = size−2; i >= 0; i−−){
      int temp = size − i − 1;
      if (arr[i] >= temp){
         arr_2[i]++;
      }
      for (int j = i+1; j < size−1 && j <= arr[i] + i; j++){
         if (arr_2[j] != −1){
            arr_2[i] = arr_2[i] + arr_2[j];
         }
      }
      if(arr_2[i] == 0){
         arr_2[i] = −1;
      }
   }
   cout<<"Count of number of ways to jump to reach end are: ";
   for (int i=0; i < size; i++){
      cout<<arr_2[i] << " ";
   }
}
int main(){
   int arr[] = {2, 3, 7, 1, 8, 9};
   int size = sizeof(arr) / sizeof(arr[0]);
   reach_end(arr, size);
   return 0;
}

आउटपुट

यदि हम उपरोक्त कोड चलाते हैं तो यह निम्न आउटपुट उत्पन्न करेगा -

Count of number of ways to jump to reach end are: 8 5 3 1 1 0

  1. C++ में एक सेट को k सबसेट में विभाजित करने के तरीकों की संख्या की गणना करें

    दो अंक e और p दिए गए हैं। लक्ष्य उन तरीकों की संख्या गिनना है जिनसे हम एक सेट के e तत्वों को p विभाजन/सबसेट में विभाजित कर सकते हैं। उदाहरण के लिए इनपुट e=4 p=2 आउटपुट Count of number of ways to partition a set into k subsets are: 7 स्पष्टीकरण If elements are: a b c d then ways to divide them into

  1. C++ . में 1 x m आकार की टाइलों का उपयोग करके n x ​​m आकार के फर्श को टाइल करने के तरीकों की संख्या की गणना करें

    दो नंबर n और m दिए गए हैं जो एक कमरे के फर्श की लंबाई और चौड़ाई को दर्शाते हैं। लक्ष्य उन तरीकों की संख्या गिनना है जिनमें 1Xm आकार की टाइलों का उपयोग करके इस मंजिल को टाइल किया जा सकता है। उदाहरण के लिए इनपुट n=3 m=2 आउटपुट Count the number of ways to tile the floor of size n x m using 1 x m size

  1. C++ में एक आयत में वर्गों की संख्या गिनें

    =B. लक्ष्य उन वर्गों की संख्या का पता लगाना है जिन्हें LXB आकार का एक आयत समायोजित कर सकता है। ऊपर दिया गया चित्र 3 X 2 आकार का एक आयत दिखाता है। इसमें 2, 2X2 वर्ग और 6,1X1 वर्ग हैं। कुल वर्ग=6+2=8. LXB आकार के प्रत्येक आयत में L*B संख्या 1X1 वर्ग होती है। सबसे बड़े वर्ग BXB आकार के होते ह