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

C++ में गैस स्टेशन (Gas Station)


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

  • हर गैस स्टेशन पर गैस की मात्रा
  • एक गैस स्टेशन से दूसरे तक की दूरी।

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

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

उदाहरण

#include <iostream>
using namespace std;

class gas {
public:
    int gas;
    int distance;
};

int findStartIndex(gas stationQueue[], int n) {
    int start_point = 0;
    int end_point = 1;
    int curr_gas = stationQueue[start_point].gas - stationQueue[start_point].distance;
    while (end_point != start_point || curr_gas < 0) {
        while (curr_gas < 0 && start_point != end_point) {
            curr_gas -= stationQueue[start_point].gas - stationQueue[start_point].distance;
            start_point = (start_point + 1) % n;
            if (start_point == 0)
                return -1;
        }
        curr_gas += stationQueue[end_point].gas - stationQueue[end_point].distance;
        end_point = (end_point + 1) % n;
    }
    return start_point;
}

int main() {
    gas gasArray[] = {{4, 6}, {6, 5}, {7, 3}, {4, 5}};
    int n = sizeof(gasArray)/sizeof(gasArray[0]);
    int start = findStartIndex(gasArray, n);
    if(start == -1)
        cout << "कोई समाधान नहीं";
    else
        cout << "पहले गैस स्टेशन का इंडेक्स: " << start;
}

इनपुट

[[4, 6], [6, 5], [7, 3], [4, 5]]

आउटपुट

पहले गैस स्टेशन का इंडेक्स: 1
  1. - C++ में Switch स्टेटमेंट: एक पूर्ण गाइड

    C++ में Switch स्टेटमेंट का उपयोग कैसे करें कंडीशनल स्टेटमेंट्स सभी प्रोग्रामिंग भाषाओं की एक सामान्य विशेषता हैं। इन स्टेटमेंट्स का उपयोग प्रोग्राम के प्रवाह को नियंत्रित करने और यह निर्दिष्ट करने के लिए किया जाता है कि कोड के विशिष्ट ब्लॉक्स कब निष्पादित होने चाहिए। C++ में उपयोग किए जाने वाले मुख

  1. - C++ में मितव्ययी संख्या (Frugal Number)

    इस समस्या में, हमें एक धनात्मक पूर्णांक N दिया गया है। हमारा कार्य यह जांचने के लिए एक प्रोग्राम बनाना है कि दी गई संख्या मितव्ययी संख्या है या नहीं। मितव्ययी संख्या (FRUGAL NUMBER) − एक संख्या जिसके अंकों की संख्या उस संख्या के अभाज्य गुणनखंडन में अंकों की संख्या से सख्ती से अधिक है। उदाहरण &

  1. C++ में पेंटाटोप संख्या C++ में पेंटाटोप संख्या

    एक पेंटाटोप संख्या को पास्कल के त्रिभुज में पांचवीं संख्या के रूप में वर्णित किया गया है। अब, चूंकि यह पांचवीं संख्या है, इसका मतलब है कि पास्कल के त्रिभुज में कम से कम पांच संख्याएं होनी चाहिए, इसलिए इस श्रृंखला की पहली संख्या 1 4 6 4 1 से शुरू होती है जो पास्कल के त्रिभुज की चौथी पंक्ति है। तो, इस