筆試偏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);