网易2017春招笔试真题集合

来源:互联网 发布:mac安装win7视频 编辑:程序博客网 时间:2024/05/29 14:45

1.双核处理

  • 题目:
    一种双核CPU的两个核能够同时的处理任务,现在有n个已知数据量的任务需要交给CPU处理,假设已知CPU的每个核1秒可以处理1kb,每个核同时只能处理一项任务。n个任务可以按照任意顺序放入CPU进行处理,现在需要设计一个方案让CPU处理完这批任务所需的时间最少,求这个最小的时间。

    • 输入包括两行:
      第一行为整数n(1 ≤ n ≤ 50)
      第二行为n个整数length[i](1024 ≤ length[i] ≤ 4194304),表示每个任务的长度为length[i]kb,每个数均为1024的倍数。
  • 题目分析:
    此题是01背包问题的变形。完成所有n个任务需要sum时间,放入两个cpu中执行,假设第一个cpu处理时间为n1,第二个cpu时间为sum-n1,并假设n1 <= sum/2,sum-n1 >= sum/2,要使处理时间最小,则n1越来越靠近sum/2,最终目标是求max(n1,sum-n1)的最大值。
    转换为01背包问题:已知最大容纳时间为sum/2,有n个任务,每个任务有其的完成时间,求最大完成时间。

01背包问题:已知背包的最大容量,有n个物品,价值分别是wi,求如何放物品能取得最大值

  • 代码:
package WangYi2017Spring;import java.util.Scanner;public class Main {    public final static int MAX_N = 50+1;    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n;        int[] time = new int[MAX_N];        int sum = 0;    //两个cpu运行的总时间        while(sc.hasNext()){            n = sc.nextInt();            for(int i=0;i<n;i++){                time[i] = sc.nextInt()>>10; //"每个数均为1024的倍数"                sum += time[i];            }            int[] dp = new int[sum/2+1];            for(int i=0;i<n;i++){                for(int j=(sum/2);j>=time[i];j--){                    dp[j] = Math.max(dp[j],dp[j-time[i]]+time[i]);                }            }            System.out.println((sum-dp[sum/2])<<10);        }    }}

2.赶去公司

  • 题目:
    终于到周末啦!小易走在市区的街道上准备找朋友聚会,突然服务器发来警报,小易需要立即回公司修复这个紧急bug。假设市区是一个无限大的区域,每条街道假设坐标是(X,Y),小易当前在(0,0)街道,办公室在(gx,gy)街道上。小易周围有多个出租车打车点,小易赶去办公室有两种选择,一种就是走路去公司,另外一种就是走到一个出租车打车点,然后从打车点的位置坐出租车去公司。每次移动到相邻的街道(横向或者纵向)走路将会花费walkTime时间,打车将花费taxiTime时间。小易需要尽快赶到公司去,现在小易想知道他最快需要花费多少时间去公司。

    • 输入数据包括五行:

      第一行为周围出租车打车点的个数n(1 ≤ n ≤ 50)

      第二行为每个出租车打车点的横坐标tX[i] (-10000 ≤ tX[i] ≤ 10000)

      第三行为每个出租车打车点的纵坐标tY[i] (-10000 ≤ tY[i] ≤ 10000)

      第四行为办公室坐标gx,gy(-10000 ≤ gx,gy ≤ 10000),以空格分隔

      第五行为走路时间walkTime(1 ≤ walkTime ≤ 1000)和taxiTime(1 ≤ taxiTime ≤ 1000),以空格分隔

  • 题目分析:
    咋一看以为很难,其实是简单题,直接枚举解决。1.要么坐车要么不坐车 2.坐车枚举坐车点就OK

  • 代码:

package WangYi2017Spring;import java.util.Scanner;public class HurryToBiz {    public final static int MAX = 50+5;    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        int n;        int[] tx = new int[MAX];        int[] ty = new int[MAX];        int gx,gy,walkTime,taxiTime;        while(sc.hasNext()){            n = sc.nextInt();            for(int i=0;i<n;i++){                tx[i] = sc.nextInt();            }            for(int i=0;i<n;i++){                ty[i] = sc.nextInt();            }            gx = sc.nextInt();            gy = sc.nextInt();            walkTime = sc.nextInt();            taxiTime = sc.nextInt();            int noTaxi = getDstn(0,0,gx,gy)*walkTime;   //不搭的士            int taxi = Integer.MAX_VALUE;            for(int i=0;i<n;i++){                int temp = getDstn(0, 0, tx[i], ty[i])*walkTime + getDstn(tx[i], ty[i], gx, gy)*taxiTime;                if(taxi>temp)                    taxi = temp;            }            System.out.println(noTaxi>taxi?taxi:noTaxi);        }    }    public static int getDstn(int x1,int y1,int x2,int y2){        return Math.abs(x2-x1)+Math.abs(y2-y1);    }}
原创粉丝点击