1.输入

推荐使用这种的输入,读取的数据量大的时候,速度更快。

static class InputReader {
        private BufferedReader bf = null;
        private StringTokenizer stz = null;
        public InputReader() {
            bf = new BufferedReader(new InputStreamReader(System.in),32*1024);
        }
        public boolean hasNext() {
            while(stz == null || !stz.hasMoreTokens()) {
                try {
                    stz = new StringTokenizer(bf.readLine());
                } catch (IOException e) {
                    return false;
                }
            }
            return true;
        }
        public String next() {
            if(hasNext()) {
                return stz.nextToken();
            }
            return null;
        }
        public int nextInt() {
            return Integer.parseInt(next());
        }
        public double nextDouble() {
            return Double.parseDouble(next());
        }
    }

 2.进制转换

十进制转换成n进制

InputReader sc  = new InputReader();
int num = sc.nextInt();
System.out.println(Integer.toString(num, 16));//这里是转成16进制

n进制转换成十进制

InputReader sc  = new InputReader();
String str = sc.next();
System.out.println(Integer.valueOf(str, 16));//这里代表字符串使用16进制表示的

以上处理的进制问题没有考虑溢出问题。也就是某个进制代表的数字很大,int类型不足以表示

n进制转换十进制(推荐)

InputReader sc  = new InputReader();
String str = sc.next();
BigInteger bigInteger = new BigInteger(str, 16);
System.out.println(bigInteger);

3. 日期运算(Calendar的API使用)

真题:世纪末的星期

1999年的12月31日是星期五,请问:未来哪一个离我们最近的一个世纪末年(即xx99年)的12月31日正好是星期天(即星期日)?

请回答该年份(只写这个4位整数,不要写12月31等多余信息)。

public static void main(String[] args) {
    Calendar calendar = Calendar.getInstance();
    for (int i = 1999; i < 10000; i+=100) {
        calendar.set(i, 11, 31);//月份从0开始计算
        if(calendar.get(Calendar.DAY_OF_WEEK) == 1) {
            System.out.println(i);  //2299
            break;
        }
    }
}

4.递归

递归就是思考解决问题的方向是自顶向下的

4.1. 最常用的递归就是全排列

public static void main(String[] args) {
         String[] arr = new String[] {"A","B","C"};
         int n = arr.length;
         recursion(arr,0,n);
    }
    private static void recursion(String[] arr,int start,int end) {
        if(start == end) {
            print(arr);
            return;
        }
        for (int i = start; i < end; i++) {
            Utils.swap(arr, i, start);
//            Arrays.sort(arr,start+1,end); 
            recursion(arr,start+1,end);
            Utils.swap(arr, start, i);
        }
    }
    private static void print(String[] arr) {
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
        System.out.println();
    }
View Code

相关文章:

  • 2022-12-23
  • 2021-07-05
  • 2021-09-26
  • 2022-03-07
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-11-27
  • 2021-09-26
  • 2022-12-23
  • 2021-11-23
  • 2022-12-23
  • 2021-11-21
相关资源
相似解决方案