分析:
本题的思路与上篇 基础练习 回文数的思路差不多,只不过是情况复杂了一些,对各位数字的和有了限制并且有五位数六位数这样的不同位数的情况。
方法一,枚举所有的五位六位整数,将它们的个十百千万(十万)位分别分离出来,然后判断是否是否是回文数并且各位数字的和满足输入的数。注意区分五位数、六位数两种情况。
方法二,用两重循环分别遍历五位数或六位数各位上的数字,若各位数字的和满足输入的数,则将其乘以该位上的权值求和即可。
当为5位数时,个位与万位(i)、十位与千位(j)、百位(k)的数字是相同的。
当为6位数时,个位与十万位(i)、十位与万位(j)、百位与千位(k)的数字是相同的。
Java代码实现:
方法一:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
for(int i = 10000; i <= 999999; i++) {
if (i < 100000) {
int g = i / 1 % 10; //个位数字
int s = i / 10 % 10; //十位数字
int b = i / 100 % 10; //百位数字
int q = i / 1000 % 10; //千位数字
int w = i / 10000 % 10; //万位数字
if (g == w && s == q && g+s+b+q+w == n) {
System.out.println(i);
}
}else {
int g = i / 1 % 10; //个位数字
int s = i / 10 % 10; //十位数字
int b = i / 100 % 10; //百位数字
int q = i / 1000 % 10; //千位数字
int w = i / 10000 % 10; //万位数字
int sw = i / 100000 % 10; //十万位数字
if (g == sw && s == w && b == q && g+s+b+q+w+sw == n) {
System.out.println(i);
}
}
}
}
}
方法二:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int sum = 0;
//5位数
for (int i = 1; i < 10; i++) {
for(int j = 0; j < 10; j++) {
for(int k = 0; k < 10; k++) {
if (2 * (i + j) + k == n) {
sum = i * 10001 + j * 1010 + k * 100;
System.out.println(sum);
}
}
}
}
//6位数
for (int i = 1; i < 10; i++) {
for(int j = 0; j < 10; j++) {
for(int k = 0; k < 10; k++) {
if (2 * (i + j + k) == n) {
sum = i * 100001 + j * 10010 + k * 1100;
System.out.println(sum);
}
}
}
}
}
}