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

C++ के सभी पेट्रोल पंपों पर जाने वाले पहले सर्कुलर टूर का पता लगाएं

मान लीजिए कि एक वृत्त है, और उस वृत्त पर n पेट्रोल पंप हैं। हमारे पास डेटा के दो सेट हैं जैसे -

  • हर पेट्रोल पंप में पेट्रोल की मात्रा
  • एक पेट्रोल पंप से दूसरे पेट्रोल पंप की दूरी

पहले बिंदु की गणना करें, जहां से एक ट्रक सर्कल को पूरा करने में सक्षम होगा। मान लीजिए 1 लीटर पेट्रोल के लिए ट्रक 1 यूनिट की दूरी तय कर सकता है। मान लीजिए कि चार पेट्रोल पंप हैं, और पेट्रोल की मात्रा, और अगले पेट्रोल पंप से दूरी इस प्रकार है [(4, 6), (6, 5), (7, 3), (4, 5)], पहला बिंदु जहां से ट्रक एक गोलाकार यात्रा कर सकता है दूसरा पेट्रोल पंप है। आउटपुट प्रारंभ होना चाहिए =1 (दूसरे गश्ती पंप का सूचकांक)

कतार का उपयोग करके इस समस्या को कुशलता से हल किया जा सकता है। कतार का उपयोग वर्तमान दौरे को संग्रहीत करने के लिए किया जाएगा। हम पहले पेट्रोल पंप को कतार में डालेंगे, हम पेट्रोल पंप तब तक डालेंगे जब तक हम यात्रा पूरी नहीं कर लेते, या पेट्रोल की वर्तमान मात्रा नकारात्मक हो जाती है। यदि राशि ऋणात्मक हो जाती है, तो हम पेट्रोल पंप खाली होने तक हटाते रहते हैं।

उदाहरण

#include <iostream>
using namespace std;
class pump {
   public:
      int petrol;
      int distance;
};
int findStartIndex(pump pumpQueue[], int n) {
   int start_point = 0;
   int end_point = 1;
   int curr_petrol = pumpQueue[start_point].petrol - pumpQueue[start_point].distance;
   while (end_point != start_point || curr_petrol < 0) {
      while (curr_petrol < 0 && start_point != end_point) {
         curr_petrol -= pumpQueue[start_point].petrol - pumpQueue[start_point].distance;
         start_point = (start_point + 1) % n;
         if (start_point == 0)
            return -1;
      }
      curr_petrol += pumpQueue[end_point].petrol - pumpQueue[end_point].distance;
      end_point = (end_point + 1) % n;
   }
   return start_point;
}
int main() {
   pump PumpArray[] = {{4, 6}, {6, 5}, {7, 3}, {4, 5}};
   int n = sizeof(PumpArray)/sizeof(PumpArray[0]);
   int start = findStartIndex(PumpArray, n);
   if(start == -1)
      cout<<"No solution";
   else
      cout<<"Index of first petrol pump : "<<start;
}

आउटपुट

Index of first petrol pump : 1

  1. C++ में किसी सरणी में सबसे छोटा और दूसरा सबसे छोटा तत्व खोजें

    मान लीजिए कि हमारे पास n तत्वों की एक सरणी है। हमें सरणी में पहला, दूसरा सबसे छोटा तत्व खोजना है। पहला सबसे छोटा सरणी का न्यूनतम है, दूसरा सबसे छोटा न्यूनतम है लेकिन पहली सबसे छोटी संख्या से बड़ा है। प्रत्येक तत्व के माध्यम से स्कैन करें, फिर तत्व की जांच करें, और इस समस्या को हल करने के लिए पहली औ

  1. C++ . में दिए गए स्ट्रिंग में "1(0+)1" के सभी पैटर्न खोजें

    मान लीजिए कि एक स्ट्रिंग में 1(0+)1 जैसे पैटर्न हैं। जहां (0+) 1s की गैर-रिक्त लगातार घटनाओं को इंगित करता है। हमें सभी पैटर्न खोजने होंगे। पैटर्न ओवरलैप कर सकते हैं। स्ट्रिंग जरूरी नहीं कि एक बाइनरी स्ट्रिंग हो। यह केवल अंक और लोअरकेस वर्ण धारण कर सकता है। मान लीजिए कि स्ट्रिंग 1101001 की तरह है, त

  1. एक सरणी में सभी जोड़े (ए, बी) खोजें जैसे कि सी ++ में% बी =के

    मान लीजिए कि हमारे पास एक सरणी ए है, उस सरणी से, हमें सभी जोड़े (ए, बी) प्राप्त करना है जैसे कि ए% बी =के। मान लीजिए कि सरणी A =[2, 3, 4, 5, 7] और k =3 है, तो जोड़े (7, 4), (3, 4), (3, 5), (3, 7) हैं। इसे हल करने के लिए, हम सूची को देखेंगे और जांचेंगे कि दी गई शर्त संतोषजनक है या नहीं। उदाहरण #inc