蓝厂春招笔试

一个小时,3道题,A出1.7道,最后一道没时间看。
题目一(100%)

/**
 * 随着制造工艺的提升,蓝厂工人生产手机的效率随着时间的推移逐渐增加,第一天每天生产一部,接着的两天每天生产2部,接着的三天每天生产3部手机,以此类推
 * 要求输入一个天数n,返回到那天总共生产的手机的数量。
 */
public class Solution {
    /**
     * @param n int整型 第n天
     * @return int整型
     */
    public int solution(int n) {
        //产品总数
        int sum = 0;
        int temp = 0;
        //当前日期每天能够生产的手机的数量
        int phone = 1;
        
        for (int i = 0; i < n; i++) {
            if (temp == phone) {
                temp = 0;
                phone++;
            }
            temp++;
            sum += phone;
        }
        return sum;
    }
}

题目二(70%)

/**
 * 现给定任意正整数n,请寻找并输出最小的正整数m(m>9),使得m的各位之乘积为n,若不存在输出-1。
 */
 public class Solution {
    public int solution(int n) {
        //返回的结果值
        int num = 0;
        //数组的下标
        int index = 0;
        //模拟的数组
        int[] m = new int[10];
        //乘积结果
        int res = n;
        //结果的最小的位数
        int weishu = 2;
        int q = 9;
        int s = 0;
        boolean marked = false;

        //通过循环计算最小的位数
        while (res > 9 * q) {
            weishu++;
            q *= 9;
        }

        int r = weishu - 1;

        while (weishu != 0) {
            for (int j = 9; j >= 1 && !marked; j--) {
                //乘积的结果
                s = res;
                //如果结果能被当前的数整除
                if (res % j == 0) {
                    marked = true;
                    //将这个数记录在数组中
                    m[index++] = j;
                    res /= j;
                }
            }
            if (s == res && res >= 10) 
                return -1;
            --weishu;
            marked = false;
        }

        //此时数组中存储着从大到小的能够整除乘积结果的数字
        for (;r>=0;r--){
            //将当前数组存储的结果转化为数字
            num = num * 10 + m[r];
        }
        return num;
    }
}

题目三(0%)

/**
 * 现在有一个3X3的智能手机解锁程序,要求输入两个正整数m和n,计算出最少使用m和键,最多使用n个键的解锁方式。
 * 1.每个模式必须连接至少m个键和最多n个键
 * 2.所有的键都必须是不同的
 * 3.如果在模式中连接两个连续键的行通过任何其他键,则其他键必须在模式中选择,不允许跳过非选择键。
 */
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章