Vzhledem k dvěma celým číslem s a d najít nejmenší možné číslo, které má přesně D Digies a a součet číslic rovná se s .
Vrátit číslo jako a řetězec . Pokud takové číslo neexistuje vrácení '-1' .
Příklady:
Vstup: s = 9 d = 2
Výstup: 18
Vysvětlení: 18 je nejmenší číslo možného s součtem číslic = 9 a celkovým číslicím = 2.schéma modelu e-rVstup: s = 20 d = 3
Výstup: 299
Vysvětlení: 299 je nejmenší možný počet s součtem číslic = 20 a celkovými číslicemi = 3.Vstup: s = 1 d = 1
Výstup: 1
Vysvětlení: 1 je nejmenší číslo možného s součtem číslic = 1 a celkovým číslicím = 1.
Obsah
slovník c#
- [Přístup brutální síly] iterace postupně - o (d*(10^d)) čas a o (1) prostor
- [Očekávaný přístup] Použití chamtivé techniky - O (d) Čas a O (1) Space
[Přístup brutální síly] iterace postupně - o (d*(10^d)) čas a o (1) prostor
C++Protože čísla jsou sekvenční přístup hrubá síly iteráty z nejmenší D-digit číslo do největší Kontrola každého z nich. Pro každé číslo vypočítáme součet jeho číslic a vrátit první platný zápas, který zajistí vybrání nejmenšího možného čísla. Pokud neexistuje žádné platné číslo, vrátíme se '-1' .
// 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));
Výstup
18
[Očekávaný přístup] Použití chamtivé techniky - O (d) Čas a O (1) Space
Tento přístup zajišťuje nehovora vlevo je nenulový Takže my Rezerva 1 za to a distribuovat zbývající částku z vpravo doleva vytvořit nejmenší možné číslo. The chamtivý přístup pomáhá při umísťování největších možných hodnot (až 9) na Nejpravděpodobnější pozice Aby bylo číslo malé.
panel nástrojů pro rychlý přístup aplikace word
Kroky k implementaci výše uvedené myšlenky:
- Zkontrolujte omezení, abyste zajistili a platné součty lze vytvořit pomocí pomocí D Digies jinak se vraťte '-1' .
- Inicializovat výsledek Jako řetězec D '0 a Rezerva 1 pro Nejvíce číslice vlevo snížením s 1 .
- Traverse z vpravo doleva a umístit Největší možná číslice (<= 9) při aktualizaci s proto.
- Li s<= 9 Umístěte svou hodnotu do aktuální pozice a nastavte s = 0 zastavit další aktualizace.
- Přiřadit Nejvíce číslice vlevo přidáním zbývající s aby to zajistilo, že to zůstává nenulo .
- Převést výsledek řetězec do požadovaného formátu a návrat je to jako konečný výstup.
// 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));
Výstup
18