猿輔導2019校招技術類筆試題 [程式設計題]大巴車(陣列分塊,按塊翻轉,塊內不變)
阿新 • • 發佈:2020-07-19
某天猿輔導 HR 組織大家去漂流,早上,參加團建的同學都到齊了,並且按到達公司的先後順序排好隊了。由於員工太多,一個大巴車坐不下,需要分多個車,車是足夠的,但所有人需要按一定順序上車,按如下規則安排上車的順序:
假設大巴車容量為 m,從隊首開始,每 m 個人分成一個小組,每個小組坐一輛車。同時只有一個車開啟車門供員工上車。 小組之間按從隊尾到隊首順序依次上車,同一小組內先到的同學先上,求所有人上車的順序。
例如: 員工數 8, 車容量 3, 員工到達順序為 1 2 3 4 5 6 7 8, 3個人一個小組,分三個小組
小組一: 1, 2, 3, 小組二: 4, 5, 6,小組三: 7,8。
小組上車順序為: 小組三,小組二,小組一 。
所有員工上車順序為 7 8 4 5 6 1 2 3
輸入描述:
第一行: 員工數和大巴容量
第二行: 所有員工工號(按到達順序)
輸出描述:
員工編號
輸入例子1:
5 3
1 3 5 2 4
輸出例子1:
2 4 1 3 5
解題思路
- 先通過 m 儲存員工數,n 儲存大巴容量,nums 陣列儲存員工到達順序。同時定義 temp 表示每一小組的第一個人的位置
- 呼叫 helper 方法,若
temp + n < m
則進行遞迴,即找到最後一個小組才停止遞迴 - 遞迴時每次輸出
temp ~ temp + n
,即一個小組的上車順序
Java遞迴法解題程式碼
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int m = in.nextInt(); int n = in.nextInt(); int[] nums = new int[m]; for (int i = 0; i < m; i++) { nums[i] = in.nextInt(); } helper(nums, 0, m, n); } private static void helper(int[] nums, int temp, int m, int n) { if (temp + n < m) { helper(nums, temp + n, m, n); } for (int i = temp; i < temp + n & i < m; i++) { System.out.print(nums[i]); if (i != n - 1) { System.out.print(" "); } } } }