【笔试训练】计算糖果和进制转换

一、选择题

1、单选:对于abstract声明的类,下面说法正确的是()

A. 可以实例化

B. 不可以被继承

C. 子类为abstract

D. 只能被继承

E. 可以被抽象类继承


答案:E

解析:抽象类不仅可以被继承,也可以使用抽象类创建一个变量。

【笔试训练】计算糖果和进制转换_第1张图片

2、多选题: 下面哪些类实现或继承了 Collection 接口()

A. HashMap     B. ArrayList     C. Vector     D. Iterator


答案:B,C

【笔试训练】计算糖果和进制转换_第2张图片

 Iterator是一个迭代器,他是一个类

二、计算糖果

【笔试训练】计算糖果和进制转换_第3张图片

题目解析:

根据输入描述和示例中的输入数字来看,示例中的4个数字,1 = A - B,-2 = B - C,3 = A + B,4 = B + C。  所以这个题就是一个纯粹的数学问题。

【笔试训练】计算糖果和进制转换_第4张图片

代码示例: 

public class Main{
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int a = scan.nextInt();
        int b = scan.nextInt();
        int c = scan.nextInt();
        int d = scan.nextInt();
        int A = (a+c)/2;
        int B1 = (c-a)/2;
        int B2 = (b+d)/2;
        int C = (d-b)/2;
        if(B1 != B2){
            System.out.println("No");
        }else{
            System.out.println(A+" "+B1+" "+C);
        }
    }
}

三、进制转换

【笔试训练】计算糖果和进制转换_第5张图片

题目解析:

这道题,就是需要找到十进制数M与需要转换的进制数N之间的关系。如示例中给出的十进制数7,转换为二进制数,转换成的二进制数为111,这个二进制7和十进制7之间的关系为:1*2^2+1*2^1+1*2^0。将一个10进制的数,转换成几进制就是需要从1开始,每一位乘以进制数的相应次方。直至与10进制数相等。

代码思路

 例如十进制123,我们在代码中创建一个字符串s从0~F,因为输入描述中说到进制数N(2 ≤ N ≤ 16),所以这个字符串中的最大数字就是16进制的F。然后使用循环,将10进制数字M与需要转换的进制数N进行模运算(M%N),使用模的值作为查找字符串元素的下标值,将当前10进制数的最低为找到之后,将这个元素放到一个数组中,然后使用(M/N)得到新的M,在通过(M%N)找到新的M的最低位对应的N进制的数字,依次类推。

【笔试训练】计算糖果和进制转换_第6张图片

代码示例 

public class Main{
    //进制转换
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        int m = scan.nextInt();
        int n = scan.nextInt();
        String s = "0123456789ABCDEF";
        StringBuffer stringBuffer = new StringBuffer();
        boolean flag = false;//使用flag记录输入的m是不是一个负数
        //如果是负数,则先转为正数,然后将flag的值改为true
        if(m<0){
            m = -m;
            flag = true;
        }
        while(m%n!=0){
            stringBuffer.append(s.charAt(m%n));
             m=m/n;
        }
        //将进制转换完成之后,通过flag判断这个数为负数,给转换完的字符串拼接一个"-"号
        if(flag){
            stringBuffer.append("-");
        }
        //由于转换的时候,得到的数字与所需要的是相反的所以需要逆置
        stringBuffer.reverse();
        System.out.println(stringBuffer);
    }
}

你可能感兴趣的:(每日一练,算法)