西安诺瓦星云科技笔试
笔试偏c…
题型:1.操作系统 2.网络接口 3.数据结构 4.面向对象 5.编程改错
友元函数、二分法、虚函数
2道改错是c语言的程序改错
老虎集团
1.公交车
1000个站台,一辆公交的容量为c,问最少需要多少辆车
输入:
[ [ 2 , 1 , 4 ] , [ 4 , 2 , 6 ] ] , 5
[上车人数,站台号,下站的站台号],公交车容量
输出:
2
public static int minCarCount (int[][] trips, int capacity) {
// write code here
//站台上车后,记录每个每个站台上车上的总人数
int[] roads = new int[1001];
int m = trips.length;
for (int i = 0;i < m;i++)
{
for (int j = trips[i][1];j <= trips[i][2];j++)
{
roads[j] += trips[i][0];
}
}
int count = 0;
for (int i = 0;i < 1001;i++)
count = Math.max(count, roads[i]);
int res = count % capacity == 0 ? count/capacity : count/capacity + 1;
return res;
}
2.打怪升级
给定几个任务的数组,里面包含打怪需要的级数和通关后可以升的级数,求完成x个任务后,最大的级数。
输入:
2,1,[ [ 0 , 1 ] , [ 1 , 2 ] , [ 1 , 3 ]
需要完成x=2个任务,现在为1级,【【0级,升1级】,【1级,升2级】,【1级,升3级】】
输出:
6
1+2+3(本身的1级+第二个任务+第三个任务)
贪心----每次通关可升级最大的那个
public int maxLevel (int x, int level, int[][] tasks) {
while(x>0){
int max = 0;
int maxid = 0;
for(int i = 0;i < tasks.length;i++){
if(level >= tasks[i][0] && max < tasks[i][1]){
max = tasks[i][1];
maxid = i;
}
}
level += max;
task[maxid][1] = 0;
x--;
}
return level;
}
递归
public int maxLevel (int x, int level, int[][] tasks) {
// write code here
//在每个任务里面找到符合现在等级的最大等级提升
int max=0;//记录最大升级数
int maxid = 0;//记录最大升级数的id----以便通关后赋值为0,免得后面重复通关
if (x==0){
return level;
}
for (int i = 0; i < tasks.length; i++) {
if (level>=tasks[i][0]&&max < tasks[i][1]){
max=tasks[i][1];
maxid = i;
}
tasks[maxid][1] = 0;
}
return maxLevel(x-1,level+max,tasks);