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

C++ में N अंक जोड़ें ताकि प्रत्येक जोड़ के बाद B से विभाज्य हो


समस्या विवरण

दिए गए a, b और n। हमें निम्नलिखित शर्तों पर विचार करके इष्टतम समाधान ढूंढना है: n अंकों को a में जोड़ें ताकि प्रत्येक पुनरावृत्ति के बाद यह b से विभाज्य हो।

शर्तें:

  1. a में एक अंक जोड़ें ताकि जोड़ने के बाद, a, b से विभाज्य हो
  2. n पुनरावृत्तियों के बाद a का सबसे छोटा संभव मान प्रिंट करें
  3. यदि ऑपरेशन विफल हो तो "fail" प्रिंट करें

हर अंक जोड़ने के बाद विभाज्यता जांचें।

उदाहरण

Input: a=5, b=4, n=4
Output: 52000

व्याख्या

पहला अंक 0 से 9 तक जोड़ा जाना है। यदि कोई अंक a को b से विभाज्य नहीं बनाता तो उत्तर -1 है। अन्यथा, पहली शर्त को पूरा करने वाला अंक जोड़ें और फिर 0 को (n-1) बार जोड़ें क्योंकि यदि a, b से विभाज्य है तो a×10, a×100, ... भी b से विभाज्य होंगे।

एल्गोरिदम

addNDigits(a, b, n):
    original = a
    for digit from 0 to 9:
        temp = a * 10 + digit
        if temp % b == 0:
            a = temp
            break
    if a == original:
        return -1  // कोई वैध अंक नहीं मिला
    for i = 1 to n-1:
        a = a * 10  // शेष अंकों के लिए 0 जोड़ें
    return a

उदाहरण

#include <iostream>
using namespace std;

int addNDigits(int a, int b, int n) {
    int original = a;

    // पहला अंक ढूंढें जो विभाज्य बनाए
    for (int i = 0; i <= 9; i++) {
        int temp = a * 10 + i;
        if (temp % b == 0) {
            a = temp;
            break;
        }
    }

    // यदि कोई अंक नहीं मिला
    if (original == a) {
        return -1;
    }

    // शेष (n-1) अंकों के लिए 0 जोड़ें
    for (int j = 0; j < n - 1; j++) {
        a *= 10;
    }

    return a;
}

int main() {
    int a = 5, b = 4, n = 4;
    int result = addNDigits(a, b, n);

    if (result == -1) {
        cout << "fail";
    } else {
        cout << result;
    }
    return 0;
}

आउटपुट

52000

अधिक उदाहरण

Input (a, b, n) Output व्याख्या
5, 4, 4 52000 52, 4 से विभाज्य है; फिर 000 जोड़ें
10, 11, 5 -1 (fail) कोई अंक 10 को 11 से विभाज्य नहीं बनाता
8, 7, 4 84000 84, 7 से विभाज्य है
12, 3, 3 1200 12 पहले से 3 से विभाज्य है

समय जटिलता

O(10 + n) = O(n) - स्थिर समय में पहला अंक ढूंढना + n-1 गुणा

  1. - C++ में A में N अंक जोड़ें ताकि प्रत्येक जोड़ के बाद यह B से विभाज्य हो

    यहां हम देखेंगे कि N अंकों को A के साथ जोड़कर एक संख्या कैसे उत्पन्न की जाए, और प्रत्येक चरण में नए अंक जोड़ते समय यह दूसरी संख्या B से विभाज्य हो। मान लीजिए हम 4 अतिरिक्त अंक जोड़कर एक 5-अंकीय संख्या बनाने जा रहे हैं। हम 7 से विभाज्यता की जांच करेंगे। संख्या 8 से शुरू होगी। तो पहले यह 4 को जोड़ेगा

  1. - C++ प्रोग्राम: शब्द को पैलिंड्रोम पार्टीशन्स में विभाजित करने के तरीकों की संख्या खोजें

    यहां हम एक C++ प्रोग्राम पर चर्चा करेंगे जो एक शब्द को इस तरह पार्टीशन करने के तरीकों की संख्या खोजता है कि प्रत्येक शब्द एक पैलिंड्रोम हो। एल्गोरिदम Begin शब्द को इनपुट के रूप में लें। function partitionadd(vector

  1. - पायथन में न्यूनतम धनात्मक पूर्णांक खोजें जो A से विभाज्य हो और उसके अंकों का योग B के बराबर हो

    मान लीजिए हमारे पास दो संख्याएं A और B हैं, हमें न्यूनतम धनात्मक संख्या M ढूंढनी है ताकि M, A से विभाज्य हो और M के अंकों का योग B के समान हो। यदि ऐसा कोई परिणाम नहीं है, तो -1 लौटाएं।तो, यदि इनपुट A = 50, B = 2 जैसा है, तो आउटपुट 200 होगा क्योंकि यह 50 से विभाज्य है और इसके अंकों का योग = 2 + 0 + 0