【发布时间】:2011-08-25 00:54:45
【问题描述】:
package testing.project;
public class PalindromeThreeDigits {
public static void main(String[] args) {
int value = 0;
for(int i = 100;i <=999;i++)
{
for(int j = i;j <=999;j++)
{
int value1 = i * j;
StringBuilder sb1 = new StringBuilder(""+value1);
String sb2 = ""+value1;
sb1.reverse();
if(sb2.equals(sb1.toString()) && value<value1) {
value = value1;
}
}
}
System.out.println(value);
}
}
这是我用Java写的代码...除了这个还有什么有效的方法吗..我们可以进一步优化这段代码吗??
【问题讨论】:
-
当然你可以进一步优化它,你可以在纸上做一些自己的数学来减少搜索空间。这就变成了一个问题,即设置分配的人愿意接受什么为 OK,因为该问题只有一个正确答案,打印该数字的最佳方法是将其作为字符串放入源中.一个相关的概念是确定一个数是否为素数和生成一个证明它是素数的证书之间的区别。
-
@Steve Jessop,你能举一些这个问题的代码例子吗..
-
例如,只执行
System.out.println("906609");的程序在功能上与您的程序等价(证明不适合此余量),毫无疑问更快。当然,这是减少搜索空间的一个极端例子。从 101 而不是 100 作为循环下限开始会获得极小的性能增益,因为任何可被 100 整除的东西都以00结尾,因此不是回文。你必须自己决定在那个范围内你做了“太多”的数学证明而没有足够的数字运算。 -
@Steve 我喜欢打印输出。它显示了真正的优化。但我不会接受它作为教授:)
-
@glowcoder:是的,但作为教授,您必须决定是否接受除对所有 3 位数字乘积或范围内所有回文的搜索之外的任何内容,那些是“显而易见的”蛮力的方法。如果您确实允许基于数学结果进行优化,您必须确定您需要多好的书面证明来证明程序是正确的。形式的所有编程问题,“编写一个打印以下描述的唯一数字的程序......”或多或少地共享这个问题。
标签: java algorithm math palindrome