📌  相关文章
📜  排列给定的数字以形成最小的数字

📅  最后修改于: 2021-04-22 10:02:34             🧑  作者: Mango

给定整数元素的数组arr [] ,任务是将它们排列成使这些数字形成尽可能小的数字的方式。
例如,如果给定的数组为{5,6,2,9,21,1},则排列将为1212569。

例子:

方法:如果所有给定的数字最多为一位,那么简单的方法是将所有数字按升序排序。但是,如果总和数超过一位,则此方法将不起作用。
因此,我们必须通过以下方式比较任何两个元素来对数组进行排序:
如果元素是AB ,则将(A + B)(B + A)进行比较,其中+表示串联

下面是上述方法的实现:

C++
// C++ implementation of the approach
#include 
#include 
using namespace std;
  
// Utility function to print
// the contents of an array
void printArr(int arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << arr[i];
}
  
// A comparison function that return true
// if 'AB' is smaller than 'BA' when
// we concatenate two numbers 'A' and 'B'
// For example, it will return true if
// we pass 12 and 24 as arguments.
// This function will be used by sort() function
bool compare(int num1, int num2)
{
    // to_string function is predefined function
    // to convert a number in string
  
    // Convert first number to string format
    string A = to_string(num1);
  
    // Convert second number to string format
    string B = to_string(num2);
  
    // Check if 'AB' is smaller or 'BA'
    // and return bool value since
    // comparison operator '<=' returns
    // true or false
    return (A + B) <= (B + A);
}
  
// Function to print the arrangement
// with the smallest value
void printSmallest(int N, int arr[])
{
    // If we pass the name of the comparison
    // function it will sort the array
    // according to the compare function
    sort(arr, arr + N, compare);
  
    // Print the sorted array
    printArr(arr, N);
}
  
// Driver code
int main()
{
    int arr[] = { 5, 6, 2, 9, 21, 1 };
    int N = sizeof(arr) / sizeof(arr[0]);
    printSmallest(N, arr);
  
    return 0;
}


Java
// Java implementation of the approach 
class GFG
{
  
    // Utility function to print
    // the contents of an array
    public static void printArr(int[] arr, int n) 
    {
        for (int i = 0; i < n; i++)
            System.out.print(arr[i]);
    }
  
    // A comparison function that return negative
    // if 'AB' is smaller than 'BA' when
    // we concatenate two numbers 'A' and 'B'
    // For example, it will return negative value if
    // we pass 12 and 24 as arguments.
    // This function will be used during sort
    public static int compare(int num1, int num2)
    {
  
        // toString function is predefined function
        // to convert a number in string
  
        // Convert first number to string format
        String A = Integer.toString(num1);
  
        // Convert second number to string format
        String B = Integer.toString(num2);
          
        // Check if 'AB' is smaller or 'BA'
        // and return integer value
        return (A+B).compareTo(B+A);
    }
  
    // Function to print the arrangement
    // with the smallest value
    public static void printSmallest(int N, int[] arr) 
    {
  
        // Sort using compare function which
        // is defined above
        for (int i = 0; i < N; i++)
        {
            for (int j = i + 1; j < N; j++)
            {
                if (compare(arr[i], arr[j]) > 0)
                {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
  
        // Print the sorted array
        printArr(arr, N);
    }
  
    // Driver code
    public static void main(String[] args) 
    {
        int[] arr = { 5, 6, 2, 9, 21, 1 };
        int N = arr.length;
        printSmallest(N, arr);
    }
}
  
// This code is contributed by
// sanjeev2552


Python3
# Python3 implementation of the approach
  
# Utility function to print
# the contents of an array
def printArr(arr, n):
  
    for i in range(0, n):
        print(arr[i], end = "")
  
# A comparison function that return true
# if 'AB' is smaller than 'BA' when
# we concatenate two numbers 'A' and 'B'
# For example, it will return true if
# we pass 12 and 24 as arguments.
# This function will be used by sort() function
def compare(num1, num2):
  
    # Convert first number to string format
    A = str(num1)
  
    # Convert second number to string format
    B = str(num2)
  
    # Check if 'AB' is smaller or 'BA'
    # and return bool value since
    # comparison operator '<=' returns
    # true or false
    return int(A + B) <= int(B + A)
      
def sort(arr):
      
    for i in range(len(arr)):
        for j in range(i + 1, len(arr)):
              
            if compare(arr[i], arr[j]) == False:
                arr[i], arr[j] = arr[j], arr[i]
  
# Function to print the arrangement
# with the smallest value
def printSmallest(N, arr):
  
    # If we pass the name of the comparison
    # function it will sort the array
    # according to the compare function
    sort(arr)
  
    # Print the sorted array
    printArr(arr, N)
  
# Driver code
if __name__ == "__main__":
  
    arr = [5, 6, 2, 9, 21, 1]
    N = len(arr)
    printSmallest(N, arr)
  
# This code is contributed by Rituraj Jain


C#
// C# implementation for above approach
using System;
  
class GFG
{
  
    // Utility function to print
    // the contents of an array
    public static void printArr(int[] arr, int n) 
    {
        for (int i = 0; i < n; i++)
            Console.Write(arr[i]);
    }
  
    // A comparison function that return negative
    // if 'AB' is smaller than 'BA' when
    // we concatenate two numbers 'A' and 'B'
    // For example, it will return negative value if
    // we pass 12 and 24 as arguments.
    // This function will be used during sort
    public static int compare(int num1, int num2)
    {
  
        // toString function is predefined function
        // to convert a number in string
  
        // Convert first number to string format
        String A = num1.ToString();
  
        // Convert second number to string format
        String B = num2.ToString();
          
        // Check if 'AB' is smaller or 'BA'
        // and return integer value
        return (A+B).CompareTo(B+A);
    }
  
    // Function to print the arrangement
    // with the smallest value
    public static void printSmallest(int N, int[] arr) 
    {
  
        // Sort using compare function which
        // is defined above
        for (int i = 0; i < N; i++)
        {
            for (int j = i + 1; j < N; j++)
            {
                if (compare(arr[i], arr[j]) > 0)
                {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
  
        // Print the sorted array
        printArr(arr, N);
    }
  
    // Driver code
    public static void Main(String[] args) 
    {
        int[] arr = { 5, 6, 2, 9, 21, 1 };
        int N = arr.Length;
        printSmallest(N, arr);
    }
}
  
// This code is contributed by Rajput-Ji


PHP


输出:
1212569