您的位置:首页 > 其它

美团点评研发笔试题

2017-03-21 11:28 169 查看

最大差值

有一个长为n的数组A,求满足0≤a≤b

给定数组A及它的大小n,请返回最大差值。
测试样例:

[10,5],2

返回:0


解题思路:遍历数组的每个数与他后面的数的差值,用max比较,存放最大差值

import java.util.*;

public class LongestDistance {
public int getDis(int[] A, int n) {
// write code here
int max=0;

for(int i=0;i<n;i++)
{
for(int j=n-1;j>i;j--)
{
if(max<A[j]-A[i])
max=A[j]-A[i];
}
}
return max;
}
}


棋子翻转

在4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。

给定两个数组A和f,分别为初始棋盘和翻转位置。其中翻转位置共有3个。请返回翻转后的棋盘。
测试样例:

[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]

返回:[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]]


解题思路:题意的翻转就是上下左右0就变1,1就变0,知道题意就好做了,先f数组一个一个定位到那个坐标点,然后在A数组的该坐标点的上下左右0就变1,1就变0,当然也处理好边界,不能小于0和大于3

import java.util.*;

public class Flip {
public int[][] flipChess(int[][] A, int[][] f) {
// write code here
int length=f.length;
int row=0;
int col=0;
for(int i=0;i<length;i++){
row=f[i][0]-1;
col=f[i][1]-1;
if(row-1>=0)
{
A[row-1][col]= A[row-1][col]==0?1:0;
}
if(row+1<=3)
{
A[row+1][col]= A[row+1][col]==0?1:0;
}
if(col-1>=0)
{
cd14
A[row][col-1]=A[row][col-1]==0?1:0;
}
if(col+1<=3)
{
A[row][col+1]=A[row][col+1]==0?1:0;
}
}
return A;
}
}


平均年龄

已知某公司总人数为W,平均年龄为Y岁(每年3月末计算,同时每年3月初入职新人),假设每年离职率为x,x>0&&x<1,每年保持所有员工总数不变进行招聘,新员工平均年龄21岁。
从今年3月末开始,请实现一个算法,可以计算出第N年后公司员工的平均年龄。(最后结果向上取整)。
输入描述:

输入W Y x N

输出描述:

输出第N年后的平均年龄

输入例子:

5 5 0.2 3

输出例子:

15


解题思路:注意每年平均年龄+1和向上取整就行

还有在牛客网在输入要do{}while(in.hasNext());要不然没有输出值

import java.util.Scanner;

public class Main{
public static int  average(int W,float Y,float x,int N){
float sum = 0;
for(int i=0;i<N;i++){
sum =W*x*21+W*(1-x)*Y;
Y=sum/W;
Y++;
}

return (int) Math.ceil(sum/W);
}

public  static  void main(String[] args){
Scanner in=new Scanner(System.in);
do{

int W=in.nextInt();
float Y=in.nextFloat();
float x=in.nextFloat();
int N=in.nextInt();
System.out.println(Main.average(W,Y,x,N));
} while(in.hasNext());

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: