0
点赞
收藏
分享

微信扫一扫

奇妙的数字【蓝桥杯】

海滨公园 2022-03-18 阅读 67

题目要求:

小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。
你能猜出这个数字是多少吗?

请填写该数字,不要填写任何多余的内容。

自己做题过程中一直用字符和数字进行判等,实际上判等应为:

chars[j] - '0' != j

思路扩展:凡是与去重有关的都应该考虑用Set集合进行去重!

package pastExamPaper;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

/*
    奇妙的数字(利用Set集合的去重原理更简单)
    教训:自己在判断的过程中一直用字符和数字进行比较导致符合条件的结果。
    字符与数字进行比较为:chars[j] - '0' != j
 */
public class Demo54 {

    public static void main(String[] args) {
        for (int i = 1; i < 100000; i++ ){
            String s = i*i+""+i*i*i;
//            if (check(s)){
//                System.out.println(i);
//            }

            char[] chars = new char[s.length()];
            for ( int j = 0; j < s.length(); j++ ){
                chars[j] = s.charAt(j);
            }
            Arrays.sort(chars);
            boolean flag = true;
            for (int j = 0; j < chars.length; j++ ){
                if (chars[j] - '0' != j){ //这里错误找了一个小时才找到,单个字符不能直接和数字进行比较。。。
                    flag = false;
                    break;
                }
            }
            if (flag){
                System.out.println(i);//69
            }

        }
    }

    private static boolean check(String s) {

        if (s.length() != 10) return false;

        Set<Character> set = new HashSet<>();
        for (int i = 0; i < s.length(); i++ ){
            set.add(s.charAt(i));
        }
        return set.size()==10;
    }

}
举报

相关推荐

0 条评论