亲爱的朋友们:
和字符串一样,某些数字也是回文。例如:1,2,3,4,5,6,7,8,9,11,22,33,......,101,111,......,753537,......等等。
这就是事情,我们需要找到一种方法来找到第一个10.000个回文数字以响应用户的输入。从1到10000的回文数开始。 例如,如果用户输入12,则表示1到10.000之间的第12个回文数是多少?
输入由一系列行组成,每行包含一个整数值i(1 <= i <= 10000)。该整数值i表示要写入输出的回文数的索引,其中索引1代表第一回文数(1),索引2代表第二回文数(2),依此类推。
EX:
输入1 - &gt;输出应为:1
输入12 - &gt;输出应为:33
输入24 - &gt;输出应为:151
import java.util.Scanner;
public class xth_palindrome
{
// Some Code may be here
public static void main(String[] args)
{
@SuppressWarnings("resource")
Scanner read = new Scanner(System.in);
System.out.println("Enter values as much as you want. To stop Enter \"0\" ");
int Xth;
do
{
Xth = read.nextInt();
// Some coding here
System.out.println(Xth + " palindromic num is " + "????");
} while(Xth != 0);
}
}
答案 0 :(得分:0)
我们可以很快地遍历回文。注意
如果有一个奇怪的回文ABCBA,下一个较大的回文将是ABDBA,其中D = C + 1
如果有一个偶数回文ABCCBA,下一个较大的回文将是ABDDBA,其中D = C + 1
推理很简单。任何其他数字也会增加更大的MSB,因此下一个更高的回文将在中心发生变化。
现在如果C = 9,我们将需要增加B并将C重置为0,使得案例变为AE0EA和AE00EA,其中E = B + 1。这种方法很容易扩展,你可以迭代回文。由于我们需要找到最多10,000个,因此对于迭代方法来说,第二个应该足够了。
答案 1 :(得分:0)
也许不是&#34;最好的方式&#34;,但工作正常。
它可以在不到1秒的时间内完成工作(取决于您的硬件)。
我已经测试了here。
import java.util.Scanner;
public class HelloWorld{
public static void main(String []args){
Scanner read = new Scanner(System.in);
System.out.println("Enter values as much as you want (lower than 100000).\n To stop Enter \"0\" ");
int Xth;
do
{
Xth = read.nextInt();
// Some coding here
if (Xth > 100000)
{
System.out.println("Type a number lower than 100000");
continue;
}
int count = 0;
for (int i = 1; i <= 1000000000; i++)
{
if (!isPalindrome(i))
continue;
count++;
if (count == Xth)
{
System.out.println(Xth + "th palindromic number is " + i);
break;
}
}
if (count != Xth)
System.out.println("I can't compute that!");
} while(Xth != 0);
}
private static StringBuilder sb = new StringBuilder();
private static boolean isPalindrome(int i)
{
sb.setLength(0);
sb.append(i);
return sb.toString().equals(sb.reverse().toString());
}