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

सी ++ में शाकाहारी-अनुकूल, मूल्य और दूरी द्वारा रेस्तरां फ़िल्टर करें

मान लीजिए कि हमारे पास रेस्तरां की एक श्रृंखला है जहां रेस्तरां [i] में [इडी, रेटिंगी, शाकाहारी अनुकूल, pricei, दूरी] है। हमें तीन फ़िल्टर का उपयोग करके रेस्तरां को फ़िल्टर करना होगा।

  • शाकाहारी के अनुकूल फ़िल्टर या तो सही होगा (मतलब हमें केवल शाकाहारी-अनुकूल सेट वाले रेस्तरां को ही शामिल करना चाहिए) या गलत (मतलब हम किसी भी रेस्तरां को शामिल कर सकते हैं)।

  • अधिकतम मूल्य फ़िल्टर और अधिकतम दूरी फ़िल्टर जो मूल्य और रेस्तरां की दूरी के लिए अधिकतम मूल्य हैं जिन पर हमें क्रमशः विचार करना चाहिए।

हमें उच्चतम से निम्नतम रेटिंग द्वारा क्रमबद्ध फ़िल्टरिंग के बाद रेस्तरां आईडी की सरणी ढूंढनी है। समान रेटिंग वाले रेस्तरां के लिए, उन्हें घटते क्रम में आईडी द्वारा ऑर्डर करें। सादगी के लिए शाकाहारी के अनुकूल और शाकाहारी के अनुकूल होने पर मान 1 लें जब यह सत्य हो, और 0 जब यह गलत हो।

तो अगर इनपुट रेस्टोरेंट की तरह है -

[[1,4,1,40,10], [2,8,0,50,5], [3,8,1,30,4], [4,10,0,10,3],[ 5,1,1,15,1]], वीगनफ्रेंडली =1, मैक्सप्रिस =50, मैक्सडिस्टेंस =10, तो आउटपुट [3,1,5] होगा, स्पष्टीकरण नीचे जैसा है -

रेस्टोरेंट 1 [id=1, रेटिंग=4, शाकाहारी फ्रेंडली=1, कीमत=40, दूरी=10]

रेस्टोरेंट 2 [id=2, रेटिंग=8, शाकाहारी फ्रेंडली=0, कीमत=50, दूरी=5]

रेस्टोरेंट 3 [id=3, रेटिंग=8, शाकाहारी फ्रेंडली=1, कीमत=30, दूरी=4]

रेस्टोरेंट 4 [id=4, रेटिंग=10, शाकाहारी फ्रेंडली=0, कीमत=10, दूरी=3]

रेस्टोरेंट 5 [id=5, रेटिंग=1, शाकाहारी फ्रेंडली=1, कीमत=15, दूरी=1]

वीगनफ्रेंडली =1, मैक्सप्राइस =50 और मैक्सडिस्टेंस =10 के साथ रेस्तरां को फ़िल्टर करने के बाद हमारे पास रेस्तरां 3, रेस्तरां 1 और रेस्तरां 5 (घटते क्रम में रेटिंग के आधार पर) हैं।

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

  • एक मैट्रिक्स को परिभाषित करें जिसे अस्थायी कहा जाता है, n :=रेस्तरां सरणी का आकार

  • मैं के लिए 0 से n - 1 की सीमा में

    • अगर vf =0 या r[i, 2] =vf और r[i, 3] <=mp और r[i, 4] <=md, तो

      • [r[i, 0], r[i, 1]] को टेम्परेचर में डालें

  • रेटिंग के आधार पर रेस्तरां को घटते क्रम में क्रमबद्ध करें

  • रिट नामक एक सरणी बनाएं

  • मेरे लिए 0 से लेकर तापमान के आकार तक की सीमा में है

    • रिट में अस्थायी [i, 0] डालें

  • वापसी रिट

उदाहरण (C++)

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

#include <bits/stdc++.h>
using namespace std;
void print_vector(vector<int> v){
   cout << "[";
   for(int i = 0; i<v.size(); i++){
      cout << v[i] << ", ";
   }
   cout << "]"<<endl;
}
class Solution {
public:
   static bool cmp(vector <int> a, vector <int> b){
      if(b[1] != a[1])return a[1] > b[1];
      return a[0] > b[0];
   }
   vector<int>filterRestaurants(vector<vector<int>>& r, int vf, int mp, int md) {
      vector < vector <int> > temp;
      int n = r.size();
      for(int i = 0; i < n; i++){
         if((vf == 0 || r[i][2] == vf) && r[i][3] <= mp && r[i][4] <= md){
            temp.push_back({r[i][0], r[i][1]});
         }
      }
      sort(temp.begin(), temp.end(), cmp);
      vector <int> ret;
      for(int i = 0; i < temp.size(); i++)ret.push_back(temp[i][0]);
         return ret;
   }
};
main(){
   vector<vector<int>> v = {{1,4,1,40,10},{2,8,0,50,5},{3,8,1,30,4},{4,10,0,10,3},{5,1,1,15,1}};
   Solution ob;
   print_vector(ob.filterRestaurants(v, 1, 50, 10));
}

इनपुट

[[1,4,1,40,10],[2,8,0,50,5],[3,8,1,30,4],[4,10,0,10,3],[5,1,1,15,1]]
1
50
10

आउटपुट

[3,1,5]

  1. C++ में किसी भी शहर और स्टेशन के बीच अधिकतम दूरी ज्ञात कीजिए

    अवधारणा दिए गए शहरों की संख्या के संबंध में एन की संख्या 0 से एन -1 तक और जिन शहरों में स्टेशन स्थित हैं, हमारा काम किसी भी शहर और उसके निकटतम स्टेशन के बीच अधिकतम दूरी निर्धारित करना है। यह ध्यान दिया जाना चाहिए कि स्टेशनों वाले शहरों को किसी भी क्रम में दिया जा सकता है। इनपुट numOfCities = 6, sta

  1. C++ में ओवरलोडिंग स्ट्रीम इंसर्शन (<<) और एक्सट्रैक्शन (>>) ऑपरेटर्स

    और स्ट्रीम इंसर्शन ऑपरेटर <<का उपयोग करके अंतर्निहित डेटा प्रकारों को इनपुट और आउटपुट करने में सक्षम है। स्ट्रीम इंसर्शन और स्ट्रीम एक्सट्रैक्शन ऑपरेटरों को किसी ऑब्जेक्ट जैसे उपयोगकर्ता-परिभाषित प्रकारों के लिए इनपुट और आउटपुट करने के लिए भी ओवरलोड किया जा सकता है। यहां, ऑपरेटर ओवरलोडिंग फ़ंक्शन क

  1. सी ++ में हटाएं () और मुफ्त ()

    हटाएं () डिलीट ऑपरेटर का उपयोग मेमोरी को डीलोकेट करने के लिए किया जाता है। उपयोगकर्ता को इस डिलीट ऑपरेटर द्वारा बनाए गए पॉइंटर वेरिएबल को डीलोकेट करने का विशेषाधिकार है। यहाँ C++ भाषा में डिलीट ऑपरेटर का सिंटैक्स दिया गया है, delete pointer_variable; आबंटित मेमोरी के ब्लॉक को हटाने के लिए सिंटैक्