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

वे संख्याएँ ज्ञात कीजिए जिनके अंकों का योग एक मान के बराबर होता है


एक संख्या n और एक मान है। हमें सभी n अंकों की संख्याएँ ज्ञात करनी हैं, जहाँ सभी n अंकों का योग दिए गए मान के समान है। यहां 0 को अंक के रूप में नहीं गिना जाता है।

संख्या n 1 से 100 के बीच होनी चाहिए और मान 1 से 500 के बीच होना चाहिए।

इनपुट और आउटपुट

Input:
This algorithm takes number of digits, and the sum value.
Let the digit count is 3. and sum is 15.
Output:
Display the number of different 3-digit numbers whose sum is 15.
The result is 69. (There are 69 different 3-digit numbers whose sum is 15)

एल्गोरिदम

गिनती(अंक, योग)

इनपुट: संख्याओं का अंक, दिया गया मान।

आउटपुट: कितनी संख्याएँ गिनें।

Begin
   if digit = 0, then
      return true when sum = 0

   if memTable[digit, sum] is not vacant, then
      return memTable[digit, sum]
   answer := 0

   for i := 0 to 9 do
      if sum – i >= 0, then
         answer := answer + count(digit – 1, sum - i)
   done

   return memTable[digit, sum] := answer
End

नंबरगणना(अंक, योग)

इनपुट: संख्या के अंक, दिए गए मान।

आउटपुट: उस प्रकार की कितनी संख्याएँ हैं।

Begin
   define memTable and make all space vacant
   res := 0

   for i := 1 to 9, do
      if sum – i >= 0, then
         res := res + count(digit – 1, sum - i)
   done

   return result
End

उदाहरण

#include<iostream>
#define ROW 101
#define COL 501
using namespace std;

unsigned long long int memTable[ROW][COL];

unsigned long long int count(int digit, int sum) {
   if (digit == 0)    //for 0 digit number check if the sum is 0 or not
      return sum == 0;

   if (memTable[digit][sum] != -1)    //when subproblem has found the result, return it
      return memTable[digit][sum];

   unsigned long long int ans = 0;    //set the answer to 0 for first time

   for (int i=0; i<10; i++)    //count for each digit and find numbers starting with it
      if (sum-i >= 0)
         ans += count(digit-1, sum-i);
   return memTable[digit][sum] = ans;
}

unsigned long long int numberCount(int digit, int sum) {
   for(int i = 0; i<ROW; i++)    //initially all entries of memorization table is -1
      for(int j = 0; j<ROW; j++)
         memTable[i][j] = -1;
               
   unsigned long long int result = 0;
   for (int i = 1; i <= 9; i++)    //count for each digit and find numbers starting with it
      if (sum-i >= 0)
         result += count(digit-1, sum-i);
   return result;
}

int main() {
   int digit, sum;
   cout << "Enter digit count: "; cin >> digit;
   cout << "Enter Sum: "; cin >> sum;
   cout << "Number of values: " << numberCount(digit, sum);
}

आउटपुट

Enter digit count: 3
Enter Sum: 15
Number of values: 69

  1. लंबाई k के सबस्ट्रिंग्स की संख्या ज्ञात करें जिनके ASCII मान का योग C++ में k से विभाज्य है

    यहां हम एक और समस्या देखेंगे, जहां एक स्ट्रिंग और दूसरा पूर्णांक मान k दिया गया है। हमें लंबाई k के सबस्ट्रिंग की संख्या ज्ञात करनी है, जिसके ASCII मानों का योग k से विभाज्य है। मान लीजिए कि एक स्ट्रिंग बीसीजीएबीसी है। और k का मान 3 है। यहाँ स्ट्रिंग BCG का ASCII योग 300 है, ABC का ASCII योग 294 है

  1. कुछ संख्याओं का गुणनफल खोजने का कार्यक्रम जिसका योग पायथन में दिया गया है

    मान लीजिए कि हमारे पास एक संख्या n है, हमें दो या दो से अधिक संख्याएँ इस प्रकार ज्ञात करनी हैं कि उनका योग n के बराबर हो, और इन संख्याओं का गुणनफल अधिकतम हो, तो हमें गुणनफल ज्ञात करना होगा। इसलिए, यदि इनपुट n =12 जैसा है, तो आउटपुट 81 होगा, जैसे 3 + 3 + 3 + 3 =12 और 3 * 3 * 3 * 3 =81। इसे हल करने

  1. पायथन में एक अंक की संख्या होने तक अंकों का योग खोजने का कार्यक्रम

    मान लीजिए कि हमारे पास एक सकारात्मक संख्या n है, हम एक नई संख्या प्राप्त करने के लिए इसके सभी अंकों को जोड़ देंगे। अब इस ऑपरेशन को 10 से कम होने तक दोहराएं। तो, अगर इनपुट 9625 की तरह है, तो आउटपुट 4 होगा। इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक विधि हल परिभाषित करें (), इसमें n लगेगा