回得太多了

0 历届试题 回文数字

问题描述:

观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。

本题要求你找到一些5位或6位的十进制数字。满足如下要求: 该数字的各个数位之和等于输入的整数。

输入格式:

一个正整数 n (10<n<100), 表示要求满足的数位和。

输出格式:

若干行,每行包含一个满足要求的5位或6位整数。 数字按从小到大的顺序排列。 如果没有满足条件的,输出:-1

样例输入:

44

样例输出:

99899 499994 589985 598895 679976 688886 697796 769967 778877 787787 796697 859958 868868 877778 886688 895598 949949 958859 967769 976679 985589 994499

样例输入:

60

样例输出:

-1

1 做题思路 & 注意事项

获取 n 的值,输出符合条件的的五位和六位十进制数,每个位数的数字求出,然后判断是否符合条件,如果是就输出。

五位的需要满足万位等于个位、千位等于十位、每个数加起来等于输入的值;六位类似。

m 是用来判断有没有满足条件的数值,到了最后面判断一下 m 的值是否为 0,如果是,输出 -1.

2 参考代码(Java)

import java.util.Scanner;
public class Main
{
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m=0;

        for(int i=10000;i<=99999;i++) {  // 5位的
	        int a = i % 100000/10000;
	        int b = i % 10000/1000;
	        int c = i % 1000/100;
	        int d = i % 100/10;
	        int e = i % 10;
	        if(a==e&&b==d&&(a+b+c+d+e==n)) {
	        	System.out.println(i);
	        	m++;
	        }
	    }

        for(int i=100000;i<=999999;i++) {  // 6位的
	        int a = i % 1000000/100000;
	        int b = i % 100000/10000;
	        int c = i % 10000/1000;
	        int d = i % 1000/100;
	        int e = i % 100/10;
	        int f = i % 10;
	        if(a==f&&b==e&&c==d&&(a+b+c+d+e+f==n)) {
	        	System.out.println(i);
	        	m++;
	        }
	    }
        if(m==0)
        	System.out.println(-1);
    }
}

相关文章: 蓝桥杯基础练习-回文数 蓝桥杯基础练习-特殊回文数