[英]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
最大? 它可以通过多种方式解决,其中之一是微分数学。 长话短说, x
和y
彼此越近,它们的乘积就越大。
A
和B
)A>B
),分配剩余的数字以最大化B
(降序排列的较大数字)。 对于A
,我们使用剩余的较小数字从中得出最大的数字。 将较大的数字分配给B
是为了使其更接近A
。 Number = 123456 取最大位数, A = 6 and B = 5
。 现在,我们将贪婪地最大化B
,因此数字变为A = 621 and B = 543
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.