Solution: Find the Largest Number Possible
Review the solution to the problem of finding the largest possible number in detail.
We'll cover the following...
Solution: Greedy approach
using System;class Program{/// <summary>/// Finds the largest number with the given number of digits and sum of digits./// </summary>/// <param name="numberOfDigits">Number of digits.</param>/// <param name="sumOfDigits">Sum of digits.</param>/// <returns>The possible largest number.</returns>public static int[] FindLargestNumber(int numberOfDigits, int sumOfDigits){// If the sum of digits is 0, then a number is possible only if the number of digits is 1.if (sumOfDigits == 0){if (numberOfDigits == 1){return new int[] { 0 };}else{return new int[] { -1 };}}// sumOfDigits is greater than the maximum possible sum.if (sumOfDigits > 9 * numberOfDigits){return new int[] { -1 };}int[] result = new int[numberOfDigits];// Fill from most significant digit to least significant digit!for (int i = 0; i < numberOfDigits; i++){// Place 9 to make the number largestif (sumOfDigits >= 9){result[i] = 9;sumOfDigits -= 9;}// If remaining sum becomes less than 9, then fill the remaining sumelse{result[i] = sumOfDigits;sumOfDigits = 0;}}return result;}// Driver code to test above functionpublic static void Main(string[] args){int sumOfDigits1 = 20;int numberOfDigits1 = 3;Console.WriteLine("[" + string.Join(", ", FindLargestNumber(numberOfDigits1, sumOfDigits1)) + "]"); // Output: 9, 9, 2int sumOfDigits2 = 100;int numberOfDigits2 = 2;Console.WriteLine("[" + string.Join(", ", FindLargestNumber(numberOfDigits2, sumOfDigits2)) + "]"); // Output: -1}}
Explanation
We can solve ...