1.

某个ip地址为 191.23.*.10 求 * 的最大值可能为?提交一个整数

思路:ip地址用十进制表示有四组,每组的取值为0-255




2.

如果一个整数 g 能同时整除整数 A 和 B,则称 g 是 A 和 B 的公约数。
例如:43 是 86 和 2021 的公约数。
请问在 1(含) 到 2021(含) 中,有多少个数与 2021 存在大于 1 的公约数。
请注意 2021 和 2021有大于 1 的公约数,因此在计算的时候要算一个。
思路:
public static void main(String[] args) {
        int count = 0;
        Set set = new HashSet();
        //i 为 公因数
        //j 为 另一个数
        for (int i = 2; i <= 2021 ; i++) {
            if(2021 % i ==0){
                for(int j = 1; j <=2021;j++){
                    if(j % i==0){
                        count++;
                        System.out.println("2021和"+j+"为:"+i);
                        set.add(j);//去重
                    }
                }
            }
        }
        System.out.println(count);//测试
        System.out.println(set);
        System.out.println(set.size());//结果

3.

2021 是一个非常特殊的数,它可以表示成两个非负整数的平方差,2021 = 45 * 45 - 2 * 2。
2025 也是同样特殊的数,它可以表示成 2025 = 45 * 45 - 0 * 0。
请问,在 1 到 2021 中有多少个这样的数?
请注意,有的数有多种表示方法,例如 9 = 3 * 3 - 0 * 0 = 5 * 5 - 4 * 4,在算答案时只算一次。
思路: 
public static void main(String[] args) {
        int count = 0;
        Set set = new HashSet();
        for (int i = 1; i <= 2021; i++) {
            for (int j = 0; j <= i; j++) {
                for (int k = 0; k <= i; k++) {
                    if (i == j * j - k * k) {
                       // System.out.println(i+"="+j+"-"+k);
                        set.add(i);
                        count++;
                    }
                }
            }
        }
        System.out.println(count);
        System.out.println(set);
        System.out.println(set.size());

4.

下面的矩阵中包含 ABCDEF 六种字符,请问出现最多的字符出现了几次?
  FFEEFEAAECFFBDBFBCDA
  DACDEEDCCFFAFADEFBBA
  FDCDDCDBFEFCEDDBFDBE
  EFCAAEECEECDCDECADDC
  DFAEACECFEADCBFECADF
  DFBAAADCFAFFCEADFDDA

  EAFAFFDEFECEDEEEDFBD
  BFDDFFBCFACECEDCAFAF
  EFAFCDBDCCBCCEADADAE
  BAFBACACBFCBABFDAFBE
  FCFDCFBCEDCEAFBCDBDD
  BDEFCAAAACCFFCBBAAEE

  CFEFCFDEEDCACDACECFF
  BAAAFACDBFFAEFFCCCDB
  FADDDBEBCBEEDDECFAFF
  CDEAFBCBBCBAEDFDBEBB
  BBABBFDECBCEFAABCBCF
  FBDBACCFFABEAEBEACBB

  DCBCCFADDCACFDEDECCC
  BFAFCBFECAACAFBCFBAF
思路:暴力循环求解就行

5.

小蓝要到店里买铅笔。
  铅笔必须一整盒一整盒买,一整盒 12 支,价格 p 元。
  小蓝至少要买 t 支铅笔,请问他最少花多少钱?
输入格式
  输入一行包含两个整数 p、t,用一个空格分隔。
输出格式
  输出一行包含一个整数,表示答案。
样例输入
5 30
样例输出
15
样例说明
  小蓝至少要买3盒才能保证买到30支铅笔,总共花费 15 元。
评测用例规模与约定
  对于所有评测用例,1 <= p <= 100,1 <= t <= 10000

6.

小蓝要用01串来表达一段文字,这段文字包含 a, b, c, d, e, f 共 6 个字母,每个字母出现的次数依次为:
    a 出现 10 次,b 出现 20 次,c 出现 3 次,d 出现 4 次,e 出现 18 次,f 出现 50 次。
  小蓝准备分别对每个字母使用确定的01串来表示,不同字母的01串长度可以不相同。
  在表示文字时,将每个字母对应的01串直接连接起来组成最终的01串。为了能够正常还原出文字,小蓝的编码必须是前缀码,即任何一个字符对应的01串都不能是另一个字符对应的01串的前缀。
  例如,以下是一个有效的编码:
  a: 000
  b: 111
  c: 01
  d: 001
  e: 110
  f: 100
  其中 c 的长度为 2,其它字母的编码长度为 3,这种方式表示这段文字需要的总长度为:10*3+20*3+3*2+4*3+18*3+50*3=312。
  上面的编码显然不是最优的,将上面的 f 的编码改为 10,仍然满足条件,但是总长度为 262,要短 50。
  要想编码后的总长度尽量小,应当让出现次数多的字符对应的编码短,出现次数少的字符对应的编码长。
  请问,在最优情况下,编码后的总长度最少是多少?
思路:
本题考察的是哈夫曼树,画图
 //画图易得
        /*
        * a:1101
        * b:10
        * c:11000
        * d:11001
        * e:111
        * f:0
        * */

7.

问题描述
      给定一个三角形的三条边的长度 a, b, c,请问这个三角形是不是一个直角三角形。
    输入格式
      输入一行包含三个整数 a, b, c,表示三角形三边的长度,相邻整数之间用一个空格分隔。
    输出格式
      如果是直角三角形,输出“YES”(全大写),否则输出“NO”(全大写)。
    样例输入
    3 4 5
    样例输出
    YES
    样例输入
    4 5 4
    样例输出
    NO
    评测用例规模与约定
  对于所有评测用例,1 <= a, b, c <= 1000。


8.

问题描述
      n 个小朋友正在做一个游戏,每个人要分享一个自己的小秘密。
      每个小朋友都有一个 1 到 n 的编号,编号不重复。
      为了让这个游戏更有趣,老师给每个小朋友发了一张卡片,上面有一个 1 到 n 的数字,每个数字正好出现一次。
      每个小朋友都将自己的秘密写在纸上,然后根据老师发的卡片上的数字将秘密传递给对应编号的小朋友。如果老师发给自己的数字正好是自己的编号,这个秘密就留在自己手里。
      小朋友们拿到其他人的秘密后会记下这个秘密,老师会再指挥所有小朋友将手中的秘密继续传递,仍然根据老师发的卡片上的数字将秘密传递给对应编号的小朋友。
      这样不断重复 n 次。
      现在,每个小朋友都记下了很多个秘密。
      老师现在想找一些小朋友,能说出所有秘密,请问老师最少要找几个小朋友?
    输入格式
      输入的第一行包含一个整数 n。
      第二行包含 n 个整数 a[1], a[2], ..., a[n],相邻的整数间用空格分隔,分别表示编号 1 到 n 的小朋友收到的数字。
    输出格式
      输出一行包含一个整数,表示答案。
    样例输入
    6
    2 1 3 5 6 4
    样例输出
    3
    样例说明
      最终小朋友 1, 2 互相知道了对方的秘密,小朋友 3 只知道自己的秘密,小朋友 4, 5, 6 互相知道了对方的秘密。
      至少要找 3 个小朋友才能说出所有秘密。
    评测用例规模与约定
      对于 30% 的评测用例,2 <= n <= 30。
      对于 60% 的评测用例,2 <= n <= 1000。
      对于所有评测用例,2 <= n <= 100000。
public class Two {
    static int[] pre;//存储数组
    static int ans;//答案
    static boolean[] used;//用来存储pre[x]是否使用过

    public static void f(int[] a) {
        used = new boolean[a.length];
        //遍历数组
        for (int i = 1; i < a.length; i++) {
            if (!used[i]) {
                //如果该数没被使用过
                used[i] = true;//只要是在循环内的全部标记已使用
                find(i, used);
            }
        }
    }

    public static void find(int x, boolean[] used) {
        int start = x;//当pre[start] = start 时说明构成循环
        while (pre[x] != start) {
            x = pre[x];
            used[x] = true;
        }
        if ((pre[x] == start)) {
            ans++;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        pre = new int[n + 1];
        for (int i = 1; i <= n; i++) {
            pre[i] = sc.nextInt();
        }
        f(pre);
        System.out.println(ans);
    }
}

9.

问题描述
          一个 1 到 n 的排列被称为半递增序列,是指排列中的奇数位置上的值单调递增,偶数位置上的值也单调递增。
          例如:(1, 2, 4, 3, 5, 7, 6, 8, 9) 是一个半递增序列,因为它的奇数位置上的值是 1, 4, 5, 6, 9,单调递增,偶数位置上的值是 2, 3, 7, 8,也是单调递增。
          请问,1 到 n 的排列中有多少个半递增序列?
        输入格式
          输入一行包含一个正整数 n。
        输出格式
          输出一行包含一个整数,表示答案,答案可能很大,请输出答案除以 1000000007 的余数。
        样例输入
        5 4+3+2+1=
        样例输出
        10
        样例说明
          有以下半递增序列:
          (1, 2, 3, 4, 5)
          (1, 2, 3, 5, 4)
          (1, 2, 4, 3, 5)
          (1, 3, 2, 4, 5)
          (1, 3, 2, 5, 4)
          (1, 4, 2, 5, 3)
          (2, 1, 3, 4, 5)
          (2, 1, 3, 5, 4)
          (2, 1, 4, 3, 5)
          (3, 1, 4, 2, 5)
        评测用例规模与约定
          对于 50% 的评测用例,2 <= n <= 20。
          对于所有评测用例,2 <= n <= 1000。

10.

问题描述
  小蓝住在 LQ 城,今天他要去小乔家玩。
  LQ 城可以看成是一个 n 行 m 列的一个方格图。
  小蓝家住在第 1 行第 1 列,小乔家住在第 n 行第 m 列。
  小蓝可以在方格图内走,他不愿意走到方格图外。
  城市中有的地方是风景优美的公园,有的地方是熙熙攘攘的街道。小蓝很喜欢公园,不喜欢街道。他把方格图中的每一格都标注了一个属性,或者是喜欢的公园,标为1,或者是不喜欢的街道标为2。小蓝和小乔住的地方都标为了1。
  小蓝每次只能从一个方格走到同一行或同一列的相邻方格。他想找到一条路径,使得不连续走两次标为 2 的街道,请问在此前提下他最少要经过几次街道?
输入格式
  输入的第一行包含两个整数 n, m,用一个空格分隔。
  接下来 n 行,每行一个长度为 m 第数字串,表示城市的标注。
输出格式
  输出一行包含一个整数,表示答案。如果没有满足条件的方案,输出 -1。
样例输入
3 4
1121
1211
2211
样例输出
2
样例输入
3 4
1122
1221
2211
样例输出
-1
样例输入
5 6
112121
122221
221212
211122
111121
样例输出
5
评测用例规模与约定
  对于 50% 的评测用例,2 <= n, m <= 20。
  对于所有评测用例,2 <= n, m <= 300。