CVTE 7月20号 Java后台笔试

编程题1

题意大概是,有两个有序(倒序)整型数组A和B,将数组A和B合并,并要求合并后的数组依然是倒序
如数组
A={98,96,90,88,78};
B={97,95,94,82,80};
合并后是 [98, 97, 96, 95, 94, 90, 88, 82, 80, 78]

代码如下

/**
    * @Title: merge
    * @Description: 将有序数组A和B合并,合并后仍是有序的
    * @param A 有序数组A
    * @param B 有序数组B
    * @return   合并后的数组
    * @return int[]    返回类型
    * @throws
    */ 
    public static int[] merge(int[] A,int[] B){

        //计算合并后的数组长度,
        int lengthA=A.length,lengthB=B.length;
        int length=lengthA+lengthB;

        //存放合并后的数组
        int[] C=new int[length];
        //数组A、B、C的下标
        int i=0,j=0,k=0;

        //比较数组A和B,将元素大的放进数组C,同时元素大的数组下标加一
        while (iif (A[i]>B[j]) {
                C[k++]=A[i++];
            }else {
                C[k++]=B[j++];
            }
        }

        //将数组剩余元素放进数组C
        if(i>=lengthA){
            while (jelse {
            while (ireturn C;
    }

测试代码

    @Test
    public void test() {
        int[] A={98,96,90,88,78};
        int[] B={97,95,94,82,80};
        int[] C=merge(A, B);
        System.out.println(Arrays.toString(C));
    }

输出

[98, 97, 96, 95, 94, 90, 88, 82, 80, 78]


编程题2

题意大概是,设计一个字符串生成器,要求生成的字符串唯一。
字符串的每个字符可以是0~9、A~Z、a~z

已实现public static long getTotal()方法,要求实现字符生成器public static String generate()

代码如下

public class Test2{
    //计数器
    private static long total=0;


    //为了方便测试,增加此方法,可以任意设置生成次数
    private  static void setTotal(long total) {
        Test2.total = total;
    }

    //字符生成器
    public static String generate(){
        long size=getTotal();

        if(size>=Math.pow(62, 4)){
            return "号码已满";
        }

        //生成字符表
        char[] g=new char[62];
        int k=0;
        for(int i=0;i<10;i++){
            g[k++]=(char) (48+i);
        }
        for(int i=0;i<26;i++){
            g[k++]=(char) (65+i);
        }
        for(int i=0;i<26;i++){
            g[k++]=(char) (97+i);
        }

        //通过已生成次数计算映射关系
        int a0=0,a1=0,a2=0,a3=0;
        a2=(int) (size/62);
        a1=a2/62;
        a0=a1/62;       
        a3=(int) (size%62);
        a2=a2%62;
        a1=a1%62;

        char[] c=new char[4];
        c[0]= g[a0];
        c[1]=g[a1];
        c[2]=g[a2];
        c[3]=g[a3];

        //维护计数器
        total+=1;


        return new String(c);

    }

    //获取生成的次数
    public static long getTotal(){
        return total;
    }
}

测试代码

    @Test
    public void test() {
        String[] strings=new String[63];
        for (int i = 0; i < 63; i++) {
            strings[i]=generate();
        }
        System.out.println(Arrays.toString(strings));
    }

运行结果

[0000, 0001, 0002, 0003, 0004, 0005, 0006, 0007, 0008, 0009, 000A, 000B, 000C, 000D, 000E, 000F, 000G, 000H, 000I, 000J, 000K, 000L, 000M, 000N, 000O, 000P, 000Q, 000R, 000S, 000T, 000U, 000V, 000W, 000X, 000Y, 000Z, 000a, 000b, 000c, 000d, 000e, 000f, 000g, 000h, 000i, 000j, 000k, 000l, 000m, 000n, 000o, 000p, 000q, 000r, 000s, 000t, 000u, 000v, 000w, 000x, 000y, 000z, 0010]

测试代码

    @Test
    public void  test2() {
        setTotal(62*62*62*61+1);
        System.out.println(generate());
    }

运行结果

z001

你可能感兴趣的:(Java面试)