我有这样的问题: -
A palindromic number reads the same both ways. The largest palindrome made from the product of two 2-digit numbers is 9009 = 91 × 99.
Find the largest palindrome made from the product of two 3-digit numbers.
Run Code Online (Sandbox Code Playgroud)
为了解决这个问题,我写了一个这样的程序:
public void palindrome(){
int n=0;
for (int i = 100; i < 999; i++) { // I belive that largest palindrome is between 100 and 999
for (int j = 100; j <999; j++) {
n=i*j;
if(n>100000){
if(n/100000==n%10){
if(n/10000-(n/100000)*10==(n%100)/10){
if(n/1000-(n/10000)*10==(n%1000)/100){
System.out.println(n);
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是输出是这样的: - 580085如果我改变这样的循环
for (int i = 900; i < 999; i++) { // I belive that largest palindrome is between 900 and 999
for (int j = 900; j <999; j++) {
Run Code Online (Sandbox Code Playgroud)
然后它得到了正确的答案,我无法理解这个程序的行为?谁有人解释一下?
你的算法错了.循环应该是这样的:
public void palindrome(){
int n=0,largest=0;
for (int i = 100; i <= 999; i++) { // I belive that largest palindrome is between 100 and 999
for (int j = i+1; j <=999; j++) {
n=i*j;
if(n>100000){
if(n/100000==n%10){//first and last
if((n/10000)%10==(n%100)/10){ //second and fifth
if((n/1000)%10==(n%1000)/100){ //third and fourth
if(n>largest) largest=n;
}
}
}
}
}
}
System.out.println(largest);
}
Run Code Online (Sandbox Code Playgroud)
这不是你的算法错了,但我很确定它会两次输出相同的结果.当i = 993且j = 913且i = 913且j = 993时,您将看到结果.但在这种情况下,输出将按i的最大值排序,这不一定会产生最大的产品.你当前的循环是排列,你需要组合来解决这个问题,即101*121等于121*101,不要重复相同的乘法两次.
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |