特殊回文数

问题描述
123321是一个非常特殊的数,它从左边和右边读是一样的
输入一个正整数n,编程求所有这样的五位和六位十进制数,满足各位数之和等于n

输入格式
输入一行包括一个正整数n
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行

样例输入
52
样例输出
899998
989989
998899

数据规模和约定
1 <= n <=54

方法一:

遍历输出

import java.util.Scanner;

public class 特殊回文数 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();

        for (int a = 1; a < 10; a++) {
            for (int b = 0; b < 10; b++) {
                for (int c = 0; c < 10; c++) {
                    if (a * 2 + b * 2 + c == n) {
                        System.out.println(" " + a + b + c + b + c);
                    }
                }
            }
        }
            for (int a = 1; a < 10; a++) {
                for (int b = 0; b < 10; b++) {
                    for (int c = 0; c < 10; c++) {
                        if (a * 2 + b * 2 + c * 2 == n){
                            System.out.println(" "+a+b+c+c+b+a);
                    }

                }

            }
        }
    }
}

运行结果
在这里插入图片描述

方法二:

分解出每一位的数字,逐一判断,符合题意则输出

import java.util.Scanner;

public class 特殊回文数01 {
    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 == 0){ //它是五位数
                int a = i%10;
                int b = ((i-a)/10)%10;
                int c = ((((i-a)/10)-b)/10)%10;
                int d = ((((((i-a)/10)-b)/10)-c)/10)%10;
                int e = ((((((((i-a)/10)-b)/10)-c)/10)-d)/10)%10;
                int sum= a*10000+b*1000+c*100+d*10+e;
                if (a+b+c+d+e == n && sum == i){
                    System.out.println(sum);
                }
            }
            else{  //它是六位数
                int a = i%10;
                int b = ((i-a)/10)%10;
                int c = ((((i-a)/10)-b)/10)%10;
                int d = ((((((i-a)/10)-b)/10)-c)/10)%10;
                int e = ((((((((i-a)/10)-b)/10)-c)/10)-d)/10)%10;
                int f = ((((((((((i-a)/10)-b)/10)-c)/10)-d)/10)-e)/10)%10;
                int sum = a*100000+b*10000+c*1000+d*100+e*10+f;
                if(sum == i && a+b+c+d+e+f == n){
                    System.out.println(sum);
                }
            }
        }
    }
}

运行结果

在这里插入图片描述

posted @ 2021-07-20 21:41  小芦荟同学  阅读(246)  评论(0编辑  收藏  举报