2017-03-25-网易实习招聘笔试题

网易实习笔试题

Posted by Jerry on March 25, 2017

编程题

小易到公司问题

小易所在坐标为(0,0),公司所在坐标为(x,y),小易到公司有两种方式,一是直接走,二是乘坐出租车,给定一些出租车车站点,走路或者只能横或者纵向走整数个坐标单位,假设走路走一个坐标单位需要w时间,而出租车走一个坐标单位需要t时间,求小易到达公司所需最短时间。 例如

输入:
2
-2 -2
0 -2
-4 -2
15 3
输出:
42

需要注意的是输入坐标可能为负数。

package top.wwj.pro.pro1;

import java.util.Scanner;

/**
 * Created by Jerry on 2017/3/25.
 */
public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //出租车车站数量
        int taxNum = sc.nextInt();
        //每个出租车车站横坐标
        int[][] tax = new int[2][taxNum];
        for(int i = 0;i<taxNum;i++){
            tax[0][i] = sc.nextInt();
        }
        //每个出租车车站纵坐标
        for(int i = 0;i<taxNum;i++){
            tax[1][i] = sc.nextInt();
        }
        //x,y公司的坐标,w为走路时间,t为taxi时间
        int x,y,w,t;
        x=sc.nextInt();y=sc.nextInt();
        w = sc.nextInt();t=sc.nextInt();
        //直接走到公司的时间
        int ans = (Math.abs(x)+Math.abs(y))*w;

        for(int i = 0;i<taxNum;i++){
            //走到车站的距离
            int tmp = Math.abs(tax[0][i])+Math.abs(tax[1][i]);
            //到公司的总时间
            tmp = tmp*w+(Math.abs(x-tax[0][i])+Math.abs(y-tax[1][i]))*t;
            //取小的
            if(tmp<ans)ans = tmp;
        }

        System.out.println(ans);
    }
}

二类分类问题

幼儿园有n个小朋友排列成一个队伍,从左到右一个挨一个,编号为(0~n-1),其中有一些是男的和女的,男的用B表示,女的用G表示,由于小朋友都比较调皮,需要将男女分开,但你只能在队形上调整,一次只能交换相邻的小朋友,,为了需要尽快完成队伍调整,求最少的交换次数,使得男女分开。如GGBBG->GGBGB->GGGBB这样只需要调整两次。 输入一个长度为n且只包含字符串G和B。

冒泡排序问题,只需要冒泡冒两次,取这两次的较小值。

package top.wwj.pro.pro1;

import java.util.Scanner;

/**
 * Created by Jerry on 2017/3/25.
 */
public class Test2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        System.out.println(s);
        char[] c = s.toCharArray();
        char[] c2 = s.toCharArray();
        int ans = 0;
        //往上冒泡
        for(int i=0;i<c.length-1;i++){//外层循环控制排序趟数
            for(int j=0;j<c.length-1-i;j++) {//内层循环控制每一趟排序多少次
                if(c[j]=='G'&&c[j+1]=='B'){
                    ans++;
                    char t = c[j];
                    c[j] = c[j+1];
                    c[j+1] = t;
                }
            }
        }
        int ans2 = 0;
        c=c2;
        //
        for(int i=0;i<c.length;i++){//外层循环控制排序趟数
            for(int j=c.length-1;j>i;j--) {//内层循环控制每一趟排序多少次
                if(c[j]=='G'&&c[j-1]=='B'){
                    ans2++;
                    char t = c[j];
                    c[j] = c[j-1];
                    c[j-1] = t;
                }
            }
        }
        System.out.println(ans+" "+ans2);
        if(ans>ans2)ans = ans2;
        System.out.println(ans + "");
    }
}