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

सी ++ का उपयोग करके एन को योग के रूप में व्यक्त करने के लिए आवश्यक पैलिंड्रोम की न्यूनतम संख्या।

समस्या कथन

एक संख्या N को देखते हुए, हमें N को उनके योग के रूप में व्यक्त करने के लिए आवश्यक न्यूनतम पैलिंड्रोम की संख्या ज्ञात करनी होगी

यदि N =15 है तो 2 पैलिंड्रोम की आवश्यकता है अर्थात 8 और 7.

एल्गोरिदम

1. Generate all the palindromes up to N in a sorted fashion
2. Find the size of the smallest subset such that its sum is N

उदाहरण

#include <iostream>
#include <vector>
#include <climits>
#include <algorithm>
using namespace std;
vector<vector<long long>> table;
int createPalindrome(int input, bool isOdd){
   int n = input;
   int palindrome = input;
   if (isOdd)
      n /= 10;
   while (n > 0) {
      palindrome = palindrome * 10 + (n % 10);
      n /= 10;
   }
   return palindrome;
}
vector<int>generatePalindromes(int n){
   vector<int> palindromes;
   int number;
   for (int j = 0; j < 2; j++) {
      int i = 1;
      while ((number = createPalindrome(i++, j)) <= n)
         palindromes.push_back(number);
   }
   return palindromes;
}
long long minSubsetSize(vector<int>& vec, int i, int j, int n){
   if (n == 0)
   return 0;
   if (i > j || vec[i] > n)
   return INT_MAX;
   if (table[i][n])
   return table[i][n];
   table[i][n] = min(1 + minSubsetSize(vec, i + 1, j, n - vec[i]), minSubsetSize(vec, i + 1, j, n));
   return table[i][n];
}
int requiredPalindromes(int n){
   vector<int> palindromes = generatePalindromes(n);
   sort(palindromes.begin(), palindromes.end());
   table = vector<vector<long long>>(palindromes.size(),
   vector<long long>(n + 1, 0));
   return minSubsetSize(palindromes, 0, palindromes.size() - 1, n);
}
int main(){
   int n = 15;
   cout << "Minimum required palindromes = " <<
   requiredPalindromes(n) << endl;
   return 0;
}

आउटपुट

जब आप उपरोक्त प्रोग्राम को संकलित और निष्पादित करते हैं। यह निम्न आउटपुट उत्पन्न करता है -

Minimum required palindromes = 2

  1. C++ का उपयोग करके N को 25 से विभाज्य बनाने के लिए आवश्यक दी गई चालों की न्यूनतम संख्या।

    समस्या कथन बिना अग्रणी शून्य के एक संख्या N दी गई है। कार्य N को 25 से विभाज्य बनाने के लिए आवश्यक न्यूनतम चालों को खोजना है। प्रत्येक चाल पर, कोई भी दो आसन्न अंकों को स्वैप कर सकता है और यह सुनिश्चित कर सकता है कि किसी भी समय संख्या में कोई अग्रणी शून्य नहीं होना चाहिए। यदि N को 25 से विभाज्य बनान

  1. C++ का प्रयोग करते हुए संख्या के गुणनखंडों का न्यूनतम योग ज्ञात कीजिए।

    यहां हम देखेंगे कि किसी दी गई संख्या के कारकों का न्यूनतम योग कैसे प्राप्त करें। मान लीजिए एक संख्या 12 है। हम इसे अलग-अलग तरीकों से गुणनखंडित कर सकते हैं - 12 =12 * 1 (12 + 1 =13) 12 =2 * 6 (2 + 6 =8) 12 =3 * 4 (3 + 4 =7) 12 =2 * 2 * 3 (2 + 2 + 3 =7) न्यूनतम योग 7 है। हम एक संख्या लेंगे और न्यून

  1. C++ में पृष्ठों की न्यूनतम संख्या आवंटित करें

    पृष्ठों की न्यूनतम संख्या आवंटित करना एक प्रोग्रामिंग समस्या है। आइए इस समस्या पर विस्तार से चर्चा करें और देखें कि इसका समाधान क्या हो सकता है। बयान आपको n विभिन्न पुस्तकों के पृष्ठों की संख्या . दी गई है . साथ ही, मी छात्र . भी हैं जिन्हें किताबें सौंपी जानी हैं। पुस्तकों को पृष्ठों की संख्या के