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

C++ में लक्ष्य को पूरा करने के लिए गोलाई त्रुटि को कम करें

मान लीजिए कि हमारे पास कीमतों की एक सरणी है पी [पी 1, पी 2 ..., पीएन] और एक लक्ष्य मूल्य, हमें प्रत्येक मूल्य पीआई से राउंडी (पीआई) को गोल करना होगा ताकि गोलाकार सरणी [राउंड 1 (पी 1), राउंड 2 (पी 2) ...,Roundn(Pn)] दिए गए लक्ष्य मान का योग है। यहां प्रत्येक ऑपरेशन राउंडी (पीआई) या तो तल (पाई) या छत (पाई) हो सकता है।

यदि गोल सरणी को लक्ष्य के लिए योग करना असंभव है, तो हमें स्ट्रिंग "-1" को वापस करना होगा। अन्यथा, सबसे छोटी गोलाई त्रुटि लौटाएं, जो (दशमलव के बाद तीन स्थानों वाली एक स्ट्रिंग के रूप में) के रूप में परिभाषित होगी -

$\displaystyle\sum\limits_{i-1}^n |Round_{i} (???? ) - ????$

इसलिए यदि इनपुट ["0.700", "2.800", "4.900"] जैसा है, और लक्ष्य 8 है। (0.7 - 0) + (3 - 2.8) + (5 - 4.9) प्राप्त करने के लिए फर्श या छत के संचालन का उपयोग करें। =0.7 + 0.2 + 0.1 =1.0

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

  • रिट:=0

  • जटिल डेटा टाइप करने के लिए (डबल और सरणी) के लिए एक प्राथमिकता कतार pq बनाएं

  • मेरे लिए 0 से लेकर कीमतों के आकार के बीच

    • x :=कीमतों का दोहरा मूल्य[i]

    • निम्न :=x का तल

    • उच्च :=x की अधिकतम सीमा

    • यदि निम्न उच्च नहीं है

      • अंतर :=(उच्च - x) - (x - निम्न)

      • pq में अंतर डालें

    • लक्ष्य :=लक्ष्य – कम

    • रिट :=रिट + (एक्स - लो)

  • यदि लक्ष्य> pq का आकार या लक्ष्य <0 है, तो "-1" पर लौटें

  • जबकि लक्ष्य 0 नहीं है

    • ret :=ret + pq के ऊपर, pq से हटाएं

    • डी
    • लक्ष्य को 1 से घटाएं

  • s :=स्ट्रिंग के रूप में रिट करें

  • तीन दशमलव स्थानों तक संख्या लेकर सबस्ट्रिंग s वापस करें

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
struct Comparator{
   bool operator()(double a, double b) {
      return !(a < b);
   }
};
class Solution {
   public:
   string minimizeError(vector<string>& prices, int target) {
      double ret = 0;
      priority_queue < double, vector < double >, Comparator > pq;
      for(int i = 0; i < prices.size(); i++){
         double x = stod(prices[i]);
         double low = floor(x);
         double high = ceil(x);
         if(low != high){
            double diff = ((high - x) - (x - low));
            pq.push(diff);
         }
         target -= low;
         ret += (x - low);
      }
      if(target > pq.size() || target < 0) return "-1";
      while(target--){
         ret += pq.top();
         pq.pop();
      }
      string s = to_string (ret);
      return s.substr (0, s.find_first_of ('.', 0) + 4);
   }
};
main(){
   vector<string> v = {"0.700","2.800","4.900"};
   Solution ob;
   cout << (ob.minimizeError(v, 8));
}

इनपुट

["0.700","2.800","4.900"]
8

आउटपुट

"1.000"

  1. लक्ष्य x प्राप्त करने के लिए पासा रोल की संख्या गिनने के लिए C++ कोड

    मान लीजिए हमारे पास एक संख्या x है। हमारे पास एक छह मुखी पासा है और उसके फलकों की संख्या 2 से 7 तक है। हमें पासे से ठीक x अंक चाहिए। जब हम पासे फेंकते हैं तो हमारे लक्ष्य तक पहुंचने के लिए अंकित संख्या को जोड़ा जाएगा। हम वास्तव में पासा रोल की संख्या के बारे में परवाह नहीं करते हैं, इसलिए हम केवल यह

  1. C++ में निकटतम बाइनरी सर्च ट्री वैल्यू II

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री और एक लक्ष्य मान है; हमें उस BST में k मान ज्ञात करना है जो लक्ष्य के सबसे निकट है। हमें यह ध्यान रखना होगा कि लक्ष्य मान एक फ़्लोटिंग-पॉइंट संख्या है। हम मान सकते हैं कि k हमेशा मान्य होता है, और k कुल नोड्स। तो, अगर इनपुट पसंद है लक्ष्य =3.714286, और

  1. Windows 10 पर रनटाइम त्रुटि C++ ठीक करें

    Microsoft Visual C++ रनटाइम लायब्रेरी विंडो में पीसी को पुनरारंभ करने पर कई विंडोज़ उपयोगकर्ताओं को रनटाइम त्रुटि C++ का सामना करना पड़ता है। उन्होंने अपने कंप्यूटर पर माइक्रोसॉफ्ट एक्सप्लोरर लॉन्च करने के बाद भी इस त्रुटि का अनुभव किया। यह उपयोगकर्ताओं के लिए चौंकाने वाला हो सकता है क्योंकि वे कंप्