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

C++ में वजन के साथ रैंडम पिक

मान लीजिए कि हमारे पास सकारात्मक पूर्णांकों की एक सरणी w है, w [i] इंडेक्स i के वजन का वर्णन करता है, हमें एक फ़ंक्शन पिकइंडेक्स () को परिभाषित करना होगा जो यादृच्छिक रूप से अपने वजन के अनुपात में एक इंडेक्स चुनता है।

इसलिए यदि इनपुट [1,3] जैसा है, तो पिकइंडेक्स () को पांच बार कॉल करें, तो उत्तर − 0, 1, 1, 1, 0 के रूप में आ सकता है।

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

  • एक सरणी v परिभाषित करें,
  • प्रारंभकर्ता के माध्यम से, के रूप में प्रारंभ करें
  • n :=w[0]
  • i के लिए 1 से लेकर w के आकार तक
    • w[i] :=w[i] + w[i – 1]
    • n :=w[i]
  • v =w
  • पिकइंडेक्स() निम्नानुसार काम करेगा -
  • यादृच्छिक संख्या r लें, v का अंतिम तत्व r mod करें
  • v में से r से छोटी नहीं, छोटी से छोटी संख्या लें, फिर तत्व से v की पहली संख्या घटाएं और वापस लौटें।

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int n;
   vector <int> v;
   Solution(vector<int>& w) {
      srand(time(NULL));
      n = w[0];
      for(int i = 1; i < w.size(); i++){
         w[i] += w[i - 1];
         n = w[i];
      }
      v = w;
   }
   int pickIndex() {
      return upper_bound(v.begin(), v.end(), rand() % v.back()) - v.begin();
   }
};
main(){
   vector<int> v = {1,3};
   Solution ob(v);
   cout << (ob.pickIndex()) << endl;
   cout << (ob.pickIndex()) << endl;
   cout << (ob.pickIndex()) << endl;
   cout << (ob.pickIndex()) << endl;
   cout << (ob.pickIndex()) << endl;
}

इनपुट

Initialize with [1, 3] and call pickIndex five times.

आउटपुट

1
1
1
1
0

  1. C++ में रैंडम पॉइंटर के साथ कॉपी लिस्ट

    एक लिंक्ड सूची एक रैखिक डेटा संरचना है जिसमें प्रत्येक नोड में दो ब्लॉक होते हैं जैसे कि एक ब्लॉक में नोड का मान या डेटा होता है और दूसरे ब्लॉक में अगले फ़ील्ड का पता होता है। आइए मान लें कि हमारे पास एक लिंक्ड सूची है जैसे कि प्रत्येक नोड में एक यादृच्छिक सूचक होता है जो सूची में अन्य नोड्स को इंग

  1. सी ++ में उदाहरण के साथ अभिव्यक्ति वृक्ष

    एक्सप्रेशन ट्री एक विशेष प्रकार का बाइनरी ट्री होता है जिसमें ट्री के प्रत्येक नोड में या तो एक ऑपरेटर या ऑपरेंड होता है। लीफ नोड्स पेड़ का एक संचालन . का प्रतिनिधित्व करता है . गैर-पत्ती नोड्स पेड़ का एक ऑपरेटर . का प्रतिनिधित्व करता है । उदाहरण: इंफिक्स एक्सप्रेशन प्राप्त करने के लिए जिस

  1. C++ में 3n स्लाइस के साथ पिज़्ज़ा

    मान लीजिए कि एक पिज्जा है जिसमें अलग-अलग आकार के 3n स्लाइस हैं, मैं और मेरे दो दोस्त पिज्जा के स्लाइस इस प्रकार लेंगे - मैं कोई भी पिज़्ज़ा स्लाइस चुनूंगा। मेरा दोस्त अमल मेरी पसंद की घड़ी की विपरीत दिशा में अगला टुकड़ा उठाएगा। मेरा दोस्त बिमल मेरी पसंद की अगली स्लाइस को दक्षिणावर्त दिशा मे