logo

המספר הקטן ביותר עם ספירת ספרות נתונה וסכום

נסה את זה בתרגול GFG ' title=

ניתנו שני מספרים שלמים ג וכן ד מצא את הקטן ביותר מספר אפשרי שיש לו בדיוק D ספרות ו סכום ספרות שווה ל ג ו
להחזיר את המספר כ- חוּט ו אם אין מספר כזה חוזר '-1' ו

דוגמאות:



קֶלֶט: s = 9 d = 2
תְפוּקָה: 18
הֶסבֵּר: 18 הוא המספר הקטן ביותר האפשרי עם סכום הספרות = 9 וסך הספרות = 2.

מיון מערך java

קֶלֶט: s = 20 d = 3
תְפוּקָה: 299
הֶסבֵּר: 299 הוא המספר הקטן ביותר האפשרי עם סכום הספרות = 20 וסך הספרות = 3.

קֶלֶט: s = 1 d = 1
תְפוּקָה: 1
הֶסבֵּר: 1 הוא המספר הקטן ביותר האפשרי עם סכום הספרות = 1 וסך הספרות = 1.



טבלת תוכן

ריפוד np

[גישת כוח ברוט] איטרציה ברצף - o (d*(10^ד)) זמן ו- O (1) שטח

מכיוון שהמספרים הם רצופים גישה לכוח ברוט חוזר מה- הקטן ביותר מספר D- ספרות ל הגדול ביותר בודק כל אחד. לכל מספר שאנו מחשבים את סכום הספרות שלו והחזיר את המשחק התקף הראשון שמבטיח את המספר הקטן ביותר האפשרי. אם לא קיים מספר תקף אנו חוזרים '-1' ו

C++
// C++ program to find the smallest d-digit // number with the given sum using  // a brute force approach #include    using namespace std; string smallestNumber(int s int d) {    // The smallest d-digit number is 10^(d-1)  int start = pow(10 d - 1);    // The largest d-digit number is 10^d - 1  int end = pow(10 d) - 1;  // Iterate through all d-digit numbers  for (int num = start; num <= end; num++) {    int sum = 0 x = num;  // Calculate sum of digits  while (x > 0) {  sum += x % 10;  x /= 10;  }  // If sum matches return the number  // as a string  if (sum == s) {  return to_string(num);  }  }  // If no valid number is found return '-1'  return '-1'; } // Driver Code int main() {    int s = 9 d = 2;    cout << smallestNumber(s d) << endl;  return 0; } 
Java
// Java program to find the smallest d-digit // number with the given sum using  // a brute force approach import java.util.*; class GfG {    static String smallestNumber(int s int d) {    // The smallest d-digit number is 10^(d-1)  int start = (int) Math.pow(10 d - 1);    // The largest d-digit number is 10^d - 1  int end = (int) Math.pow(10 d) - 1;  // Iterate through all d-digit numbers  for (int num = start; num <= end; num++) {    int sum = 0 x = num;  // Calculate sum of digits  while (x > 0) {  sum += x % 10;  x /= 10;  }  // If sum matches return the number  // as a string  if (sum == s) {  return Integer.toString(num);  }  }  // If no valid number is found return '-1'  return '-1';  }  // Driver Code  public static void main(String[] args) {    int s = 9 d = 2;    System.out.println(smallestNumber(s d));  } } 
Python
# Python program to find the smallest d-digit # number with the given sum using  # a brute force approach def smallestNumber(s d): # The smallest d-digit number is 10^(d-1) start = 10**(d - 1) # The largest d-digit number is 10^d - 1 end = 10**d - 1 # Iterate through all d-digit numbers for num in range(start end + 1): sum_digits = 0 x = num # Calculate sum of digits while x > 0: sum_digits += x % 10 x //= 10 # If sum matches return the number # as a string if sum_digits == s: return str(num) # If no valid number is found return '-1' return '-1' # Driver Code if __name__ == '__main__': s d = 9 2 print(smallestNumber(s d)) 
C#
// C# program to find the smallest d-digit // number with the given sum using  // a brute force approach using System; class GfG {    static string smallestNumber(int s int d) {    // The smallest d-digit number is 10^(d-1)  int start = (int)Math.Pow(10 d - 1);    // The largest d-digit number is 10^d - 1  int end = (int)Math.Pow(10 d) - 1;  // Iterate through all d-digit numbers  for (int num = start; num <= end; num++) {    int sum = 0 x = num;  // Calculate sum of digits  while (x > 0) {  sum += x % 10;  x /= 10;  }  // If sum matches return the number  // as a string  if (sum == s) {  return num.ToString();  }  }  // If no valid number is found return '-1'  return '-1';  }  // Driver Code  public static void Main() {    int s = 9 d = 2;    Console.WriteLine(smallestNumber(s d));  } } 
JavaScript
// JavaScript program to find the smallest d-digit // number with the given sum using  // a brute force approach function smallestNumber(s d) {    // The smallest d-digit number is 10^(d-1)  let start = Math.pow(10 d - 1);    // The largest d-digit number is 10^d - 1  let end = Math.pow(10 d) - 1;  // Iterate through all d-digit numbers  for (let num = start; num <= end; num++) {    let sum = 0 x = num;  // Calculate sum of digits  while (x > 0) {  sum += x % 10;  x = Math.floor(x / 10);  }  // If sum matches return the number  // as a string  if (sum === s) {  return num.toString();  }  }  // If no valid number is found return '-1'  return '-1'; } // Driver Code let s = 9 d = 2; console.log(smallestNumber(s d)); 

תְפוּקָה
18 

[גישה צפויה] באמצעות טכניקה חמדנית - O (D) זמן ו- O (1) שטח

הגישה מבטיחה את הספרה השמאלית ביותר הוא לא אפס אז אנחנו מילואים 1 עבור זה ולהפיץ את הסכום שנותר מ ימין לשמאל כדי ליצור את המספר הקטן ביותר האפשרי. THE גישה חמדנית מסייע בהצבת הערכים הגדולים ביותר האפשריים (עד 9) ב המיקומים הימניים ביותר כדי לשמור על המספר קטן.



להשוות למחרוזת

שלבים ליישום הרעיון לעיל:

  • בדוק אילוצים כדי להבטיח א סכום תקף ניתן ליצור באמצעות D ספרות אחרת חזור '-1' ו
  • לְאַתחֵל תוֹצָאָה בתפקיד מחרוזת של D '0's וכן מילואים 1 עבור ספרה שמאלית ביותר על ידי צמצום s על ידי 1 ו
  • מעבר מ ימין לשמאל ולהניח את הספרה הגדולה ביותר האפשרית (<= 9) תוך כדי עדכון ג לְפִיכָך.
  • אִם ג<= 9 מקם את ערכו במיקום הנוכחי והגדרה s = 0 כדי לעצור עדכונים נוספים.
  • הקצה את ספרה שמאלית ביותר על ידי הוספת נשאר ס כדי להבטיח שזה יישאר לא אפס ו
  • להמיר את תוֹצָאָה מחרוזת לפורמט הנדרש ו לַחֲזוֹר זה כתפוקה הסופית.
C++
// C++ program to find the smallest d-digit  // number with the given sum using // Greedy Technique #include    using namespace std; string smallestNumber(int s int d) {    // If sum is too small or too large   // for d digits  if (s < 1 || s > 9 * d) {  return '-1';  }  string result(d '0');     // Reserve 1 for the leftmost digit  s--;   // Fill digits from right to left  for (int i = d - 1; i > 0; i--) {    // Place the largest possible value <= 9  if (s > 9) {  result[i] = '9';  s -= 9;  } else {  result[i] = '0' + s;  s = 0;  }  }  // Place the leftmost digit ensuring  // it's non-zero  result[0] = '1' + s;    return result; } // Driver Code int main() {    int s = 9 d = 2;    cout << smallestNumber(s d) << endl;  return 0; } 
Java
// Java program to find the smallest d-digit  // number with the given sum using // Greedy Technique import java.util.*; class GfG {    static String smallestNumber(int s int d) {    // If sum is too small or too large   // for d digits  if (s < 1 || s > 9 * d) {  return '-1';  }  char[] result = new char[d];  Arrays.fill(result '0');    // Reserve 1 for the leftmost digit  s--;  // Fill digits from right to left  for (int i = d - 1; i > 0; i--) {    // Place the largest possible value <= 9  if (s > 9) {  result[i] = '9';  s -= 9;  } else {  result[i] = (char) ('0' + s);  s = 0;  }  }  // Place the leftmost digit ensuring  // it's non-zero  result[0] = (char) ('1' + s);    return new String(result);  }  // Driver Code  public static void main(String[] args) {    int s = 9 d = 2;    System.out.println(smallestNumber(s d));  } } 
Python
# Python program to find the smallest d-digit  # number with the given sum using # Greedy Technique def smallestNumber(s d): # If sum is too small or too large  # for d digits if s < 1 or s > 9 * d: return '-1' result = ['0'] * d # Reserve 1 for the leftmost digit s -= 1 # Fill digits from right to left for i in range(d - 1 0 -1): # Place the largest possible value <= 9 if s > 9: result[i] = '9' s -= 9 else: result[i] = str(s) s = 0 # Place the leftmost digit ensuring # it's non-zero result[0] = str(1 + s) return ''.join(result) # Driver Code if __name__ == '__main__': s d = 9 2 print(smallestNumber(s d)) 
C#
// C# program to find the smallest d-digit  // number with the given sum using // Greedy Technique using System; class GfG {  static string smallestNumber(int s int d) {    // If sum is too small or too large   // for d digits  if (s < 1 || s > 9 * d) {  return '-1';  }  char[] result = new char[d];  Array.Fill(result '0');  // Reserve 1 for the leftmost digit  s--;  // Fill digits from right to left  for (int i = d - 1; i > 0; i--) {    // Place the largest possible value <= 9  if (s > 9) {  result[i] = '9';  s -= 9;  } else {  result[i] = (char) ('0' + s);  s = 0;  }  }  // Place the leftmost digit ensuring  // it's non-zero  result[0] = (char) ('1' + s);    return new string(result);  }  // Driver Code  static void Main() {    int s = 9 d = 2;    Console.WriteLine(smallestNumber(s d));  } } 
JavaScript
// JavaScript program to find the smallest d-digit  // number with the given sum using // Greedy Technique function smallestNumber(s d) {    // If sum is too small or too large   // for d digits  if (s < 1 || s > 9 * d) {  return '-1';  }  let result = Array(d).fill('0');   // Reserve 1 for the leftmost digit  s--;  // Fill digits from right to left  for (let i = d - 1; i > 0; i--) {    // Place the largest possible value <= 9  if (s > 9) {  result[i] = '9';  s -= 9;  } else {  result[i] = String(s);  s = 0;  }  }  // Place the leftmost digit ensuring  // it's non-zero  result[0] = String(1 + s);    return result.join(''); } // Driver Code let s = 9 d = 2; console.log(smallestNumber(s d)); 

תְפוּקָה
18