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

C++ में मोनोटोन बढ़ते अंक


मान लीजिए हमारे पास एक गैर-ऋणात्मक पूर्णांक N है, हमें N से कम या बराबर सबसे बड़ी संख्या ढूंढनी है जिसके अंक मोनोटोन रूप से बढ़ते हों। हम जानते हैं कि एक पूर्णांक के अंक मोनोटोन रूप से बढ़ते हैं यदि और केवल यदि आसन्न अंकों का प्रत्येक जोड़ा x और y, x ≤ y को संतुष्ट करता है। इसलिए यदि इनपुट 332 है, तो परिणाम 299 होगा।

हल का दृष्टिकोण

इसे हल करने के लिए हम निम्नलिखित चरणों का पालन करेंगे:

  • s := N को स्ट्रिंग में बदलें, i := 1, n := s का आकार
  • while i < n और s[i] >= s[i-1]:
    • i को 1 से बढ़ाएं
  • if i < n:
    • while i > 0 और s[i-1] > s[i]:
      • i को 1 से घटाएं
      • s[i] को 1 से घटाएं
  • j = i+1 से n-1 तक:
    • s[j] := '9'
  • s को संख्या के रूप में लौटाएं

उदाहरण

#include <bits/stdc++.h> 
using namespace std; 

class Solution { 
public: 
    int monotoneIncreasingDigits(int N) { 
        string s = to_string(N); 
        int i = 1; 
        int n = s.size(); 
        while(i < n && s[i] >= s[i - 1]) i++; 
        if(i < n) 
            while(i > 0 && s[i - 1] > s[i]){ 
                i--; 
                s[i]--; 
            } 
        for(int j = i + 1; j < n; j++) s[j] = '9'; 
        return stoi(s); 
    } 
}; 

int main(){ 
    Solution ob; 
    cout << (ob.monotoneIncreasingDigits(332)); 
}

इनपुट

332

आउटपुट

299

  1. - C++ में मोनोटोन बढ़ती स्ट्रिंग में फ्लिप (Flip String to Monotone Increasing)

    मान लीजिए 0s और 1s की एक स्ट्रिंग दी गई है। वह स्ट्रिंग मोनोटोनिकली बढ़ती (monotone increasing) होगी यदि इसमें कुछ संख्या में 0s (संभवतः 0), उसके बाद कुछ संख्या में 1s (संभावतः 0) हों। हमारे पास 0s और 1s की एक स्ट्रिंग S है, और हम किसी भी 0 को 1 में या 1 को 0 में फ्लिप कर सकते हैं। S को मोनोटोन बढ़

  1. - C++ प्रोग्राम में K डिजिट्स हटाना

    मान लीजिए नंबर्स का एक सीक्वेंस अंकगणितीय कहलाता है अगर इसमें कम से कम तीन एलिमेंट्स हैं और किन्हीं दो लगातार एलिमेंट्स के बीच का अंतर समान है। उदाहरण के लिए, ये अंकगणितीय सीक्वेंस हैं: [1, 3, 5, 7, 9], [7, 7, 7, 7], [3, -1, -5, -9], लेकिन निम्न सीक्वेंस अंकगणितीय नहीं है: [1, 1, 2, 5, 7] अब N नंबर

  1. - C++ में K डिजिट्स हटाना

    मान लीजिए हमारे पास एक नॉन-नेगेटिव इंटीजर num है जिसे स्ट्रिंग के रूप में दर्शाया गया है, हमें नंबर से k डिजिट्स हटाने हैं ताकि नया नंबर सबसे छोटा संभव हो। उदाहरण के लिए, अगर इनपुट 1432219 है और k = 3, तो रिजल्ट 1219 होगा। इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे: एक स्टैक st डिफाइन करें,