如何排列数字的数字,以便当我将其分成两个相同数字时,两个数字的乘积最大?

How to arrange the digits of a number such that when I break it into two numbers of equal digits the product of the two numbers is maximum?

例子:如果我取数字4544,那么当我重新排列数字为5444时,我得到的最大乘积是2376。 (54 x 44) = 2376 大于 (45 x 44) = 1980

我解决这个问题的方法是用所有可能的方式排列数字,把它分成两部分,然后从那里找到最大的乘积。是否有更快的方法来解决问题,或者是否可以采用完全不同的方法来解决问题?

这是我的代码:

 import java.util.*;
class MaxProduct
{
    static int maxprod = 0;
    public static void main(String args[])
    {
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a no");
    String n = sc.next();
    permute(n,0);
    System.out.println("Max Product is "+maxprod);
    }
    public static void permute(String s,int i)
    {
             if( i==s.length()-1)
         {
            int a = Integer.parseInt(s.substring(0,i/2+1));
            int b = Integer.parseInt(s.substring(i/2+1));
            maxprod = Math.max(a*b,maxprod);
         }
            else 
            {
            for(int k=i;k<s.length();k++)
                {
                          s =swapelement(s,k,i); 
                          permute(s,i+1);
                          s=swapelement(s,k,i);
            }
            }
    }
       public static String swapelement(String a,int i, int j)
            {
                char x[]=a.toCharArray();
                char ch = x[i];
                x[i]=x[j];
                x[j]=ch;
                return String.valueOf(x);
            }
}

谢谢!

一种方法可以是两个找到两个最高的数字,并将它们放在最左边的位置,而不是为剩下的第二个位置做相反的事情。

例如:

如果你有数字 1234,最高数字是 3 和 4,所以让他们保持在第一位,剩下的 2 做同样的事情,所以数字将是:

(41*32) = 1312

所以你在这里看到 1312 是可能的最大数字

我们先来看一个小问题。对于变量x,y,你得到

x + y = c (constant)

问题是,什么时候x*y最大?它可以通过多种方式解决,其中之一是 differential math。长话短说,xy 越接近,它们的乘积就越大。

如何将此应用于您的问题?

  1. 取集合中最大的数字,将它们分配给数字(让它们为AB
  2. 一旦一个数字变得比另一个数字大(令A>B),分配剩余的数字以最大化B(较大的数字按降序排列)。对于 A,我们使用剩余的较小数字从中得出最大的数字。将较大的数字分配给 B 是为了使其更接近 A.
示例 #1

人数=123456 取最大位数,A = 6 and B = 5。现在,我们将贪婪地最大化 B,因此数字变为 A = 621 and B = 543

示例 #2

人数=88871256 取最大位数,A = 8 and B = 8。由于它们仍然相等,我们重复步骤 1,所以 A = 88 and B = 87。现在,我们将贪婪地最大化 B,因此数字变为 A = 8821 and B = 8765.

由于这是一个相当简单的问题,因此似乎没有必要添加任何实现。