题目描述
观察数字: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
解题思路
本来想用dfs,后来发现只要求输出的回文数字为5位或者6位
于是用了三层循环,从1循环到9
先算出5位再算6位的
但是wa了三次,发现漏了一种情况,回文数字第一个和最后一个不能为0,其他的数字都可以是0.
代码
package 回文数字;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int x,y;
int sum=0;
for(int i=1;i<10;i++)
{
x=i;
n=n-2*i;
if(n>=0)
{
for(int j=0;j<10;j++)
{
y=j;
n=n-2*j;
if(n>=0)
{
for(int k=0;k<10;k++)
{
if(k==n)
{
sum+=1;
System.out.println(x*10000+y*1000+k*100+y*10+x);
}
}
}
n=n+2*j;
}
}
n=n+2*i;
}
for(int i=1;i<10;i++)
{
x=i;
n=n-2*i;
if(n>=0)
{
for(int j=0;j<10;j++)
{
y=j;
n=n-2*j;
if(n>=0)
{
for(int k=0;k<10;k++)
{
if(2*k==n)
{
sum+=1;
System.out.println(x*100000+y*10000+k*1000+k*100+y*10+x);
}
}
}
n=n+2*j;
}
}
n=n+2*i;
}
if(sum==0)
{
System.out.println(-1);
}
}
}
来源:CSDN
作者:十七的余年
链接:https://blog.csdn.net/weixin_44544406/article/details/104216163