9月19号蘑菇街笔试
前面的选择题不说了,对于我这个linux都不会的人来说简直乱蒙。比较有把握的后面三道写程序的题目。
第一题:n个班每个班ai个人,容量为m的 大巴,每个班要么上,要么不上,至少需要多少辆大巴
一开始看成了01背包 最多上几个 ,后来反应过来的,就一个贪心,先排序然后能上就上。
input:n m
ai
output:至少几辆
input:4 3
2 3 2 1
output:3
class Load{
public static void main(String[] args) {
int n,m,x;
List<Integer> list = new ArrayList<Integer>();
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
m=sc.nextInt();
for (int i=0; i<n; i++){
x = sc.nextInt();
list.add(x);
}
Collections.sort(list);
Collections.reverse(list);
int count = 0,len = 1;;
int[] a = new int[10000];
for (int i=0; i<n; i++)
a[i] = 0;
for (Integer each: list) {
int j = 1;
while (a[j]+each>m)
j++;
a[j] = a[j] + each;
if (j>len)
len = j;
}
System.out.print(len);
}
}
第二题:给一个圆的圆心半径,可以移动,移动方式:要求绕圆上任意一点旋转。给定目标圆心位置,求最少移动次数
一个数学题,每次移动圆心到达的点就是以两倍半径画个圆得到的轨迹上的任意点。问题转化求出原始和目的圆心的距离d,需要多少个两倍半径r才能够到底 d的长度
input:r x1 y1 x2 y2
output:至少几次
input :2 0 0 0 4
output:1
class Move{
public static void main(String args[]){
int x1,x2,y1,y2,r;
double dis;
Scanner sc = new Scanner(System.in);
r=sc.nextInt();
x1=sc.nextInt();
y1=sc.nextInt();
x2=sc.nextInt();
y2=sc.nextInt();
dis = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
if (Math.abs(dis - 0.00) <0.00001)
System.out.println(0);
else{
int i = 1,d = r*2;
while (d<dis)
{
d = d+2*r;
i++;
}
System.out.println(i);
}
}
第三题,给定一个字符串,判断插入一个字符是否能是原来的字符成为回文
看到数据规模len<=10:我就想到这是 道暴力搜索
代码太丑不贴了
感觉自己老了,切不动题了。 蘑菇街的题目不难,但还是有点水准的。至少比某为好多了。