繁体   English   中英

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

[英]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);
            }
}

谢谢!

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

x + y = c (constant)

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

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

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

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

例子#2

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

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

一种方法可以是两个找到两个最高数字,并将它们保留在最左边的位置,然后相反地保留第二位。

例如:

如果你有数字 1234,最高数字是 3 和 4,所以让他们先保留 position,剩下的 2 做同样的事情,所以数字将是:

(41*32) = 1312

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM