问题描述 观察数字: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 代码: 用简单的循环实现。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n=sc.nextInt();//n, m,分别表示小岛的个数和桥的数量。 boolean exist=false; //计算5位数 for(int i=1;i<=9;i++){ if(n-i*2<0){ break; } else if(n-i*2>27){ continue; } for(int j=0;j<=9;j++){ if(n-(i+j)*2<0){ break; } else if(n-(i+j)*2>9){ continue; } System.out.println(i*10000+j*1000+(n-(i+j)*2)*100+j*10+i); exist=true; } } //计算6位数 for(int i=1;i<=9;i++){ if(n-i*2<0){ break; } else if(n-i*2>36){ continue; } for(int j=0;j<=9;j++){ if(n-(i+j)*2<0){ break; } else if(n-(i+j)*2>18 || (n-(i+j)*2)%2==1){ continue; } System.out.println(i*100000+j*10000+(n-(i+j)*2)/2*(1000+100)+j*10+i); exist=true; } } if(!exist) System.out.println(-1); } }