原题链接:蓝桥杯历届试题-回文数字
import java.util.Scanner;
public class Text {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建一个扫描器
Scanner scanner=new Scanner(System.in);
//接收一个整数
while (scanner.hasNext()) {
int n=scanner.nextInt();
//创建一个string类型的数据,用来把控制5-7位的i转化为string类型的数据,
//在用charAt()方法来把string类型的数据一个个分开
String b;
//用来计数
int count=0;
//利用i来控制5-7位数
for (int i = 10000; i < 1000000; i++) {
//把i转化为string
b=String.valueOf(i);
//把每一个i的数据看成回文数据;
boolean flay=true;
//把分割的string类型数据用数据装起来,所以数组的长度就是b的最大长度
int []jie=new int[b.length()];
//定义一个sum数据,用来把数组中的每一个数据相加
int sum=0;
//利用for循环,来控制数组的索引和变道charAt()的index
for (int j = 0; j < jie.length; j++) {
//charAt()方法是返回指定索引的字符,就可以把0 1 2 3 4.....看成一个字符,在利用charAt()把a的数据分割
//char值的0为整数48,1为整数49,2为整数50......所以每一个索引减去48就可以分解成123456789的形式
jie[j]=b.charAt(j)-48;
//把数组中的每一个数据相加
sum=sum+jie[j];
}
//要是sum一加起来要是和接收的整数相同
if (sum==n) {
//要是进来一次,那就相加加一,要是一次没有进来,除非是大于9+9+9+9+9+9
//不然在这么说都会有数小于9+9+9+9+9+9,因为不管是个数位还是十数位还是百数位一致百位数(百位数不加)都在加所有从一到9+9+9+9+9+9都会有
//而大于9+9+9+9+9+9的就不会进入sum==n来,而是直接pass了
count++;
//如果是,那么数组的左边和数组的右边要相同,要是右边大于左边,就跳出循环
for (int left=0,right=jie.length-1; right>left;left++,right--) {
//判断左边等不等于右边
if (jie[left]!=jie[right]) {
//要是不等于,那么i就不是回文数据直接给个false
flay=false;
//既然这个数是false,那么也没有什么用,就break;
break;
}
}
}
//要是sum一加起来要是和接收的整数不相同
else {
//那么i就直接给个false
flay=false;
}
//如果i满足sum=n,并且还是回文数字,那么他就是满足的,啥也不用给,因为上面我把所有数子都看成回文数子了
if (flay==true) {
//最后输出
System.out.println(i);
}
}
if (count==0) {
System.out.println("-1");
}
}
}
}解题思路:回文数子都是等式左边等于右边的数子,所以要判定每一个数字,然后分解成个位数,然后在弄进数组理。然后在看看左边和右边是不是相等,要是相等就返回数字,要不是没有一个相等的就返回-1;
注意事项: 我这个是假设法,就是每一个数都判定是对的,然后来证明他是对的,要是对的就输出不是对的就返回-1
参考代码:
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复