徐稳权


私信TA

用户名:18671468805

访问量:10790

签 名:

等  级
排  名 566
经  验 4342
参赛次数 0
文章发表 58
年  龄 0
在职情况 学生
学  校 湖北生物科技职业学院
专  业

  自我简介:

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 人评分

  评论区

  • «
  • »