蓝桥杯历届真题-回文数字 Java实现

回文数字

题目描述:

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

本题要求你找到一些5位或6位的十进制数字。满足如下要求:

该数字的各个数位之和等于输入的整数。

输入格式:

一个正整数 n (10

输出格式:

若干行,每行包含一个满足要求的5位或6位整数。

数字按从小到大的顺序排列。

如果没有满足条件的,输出:-1

输入样例1:
44
输出样例:
99899
499994
589985
598895
679976
688886
697796
769967
778877
787787
796697
859958
868868
877778
886688
895598
949949
958859
967769
976679
985589
994499
输入样例2:
60
输出样例2:
-1
思路:

这道题没去纠结什么方法,直接暴力遍历找出即可。用flag做标示器,找到将flag记为1,没找到记为0,最后flag为0则输出-1。

下面附上代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

import javax.print.attribute.Size2DSyntax;
import javax.security.auth.x500.X500Principal;
import javax.swing.text.Highlighter;

import org.omg.PortableServer.ID_ASSIGNMENT_POLICY_ID;


public class Main{
	public static void main(String args[]) throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		String s[]=br.readLine().split("\\s+");
		int n=Integer.parseInt(s[0]);
		int flag=0;
		for (int i = 10000; i < 100000; i++) {
			int a=i%10;
			int b=i/10%10;
			int c=i/100%10;
			int d=i/1000%10;
			int e=i/10000;
			if(a==e&&b==d&&a+b+c+d+e==n)
			{
				System.out.println(i);
				flag=1;
			}
		}
		for (int i = 100000; i < 1000000; i++) {
			int a=i%10;
			int b=i/10%10;
			int c=i/100%10;
			int d=i/1000%10;
			int e=i/10000%10;
			int f=i/100000;
			if(a==f&&b==e&&c==d&&a+b+c+d+e+f==n)
			{
				System.out.println(i);
				flag=1;
			}
		}
		if(flag==0)
			System.out.println(-1);
	}
}

你可能感兴趣的:(算法,蓝桥杯)