15.2 编程题及解析
更新时间:2019.04.24 题目总量:9
以下参考答案均通过在线OJ的审查,符合内存和运行时间要求。
在线编程中,编程语言不限,但以Java和C/C++为主。参考答案以C/Java为主。
15.2.1 坐大巴车(猿辅导笔试真题)
某天猿辅导 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 |
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int Enum = sc.nextInt(); int Bnum = sc.nextInt(); int[] arr = new int[Enum]; int n = 0; for(int i = 0;i<Enum;i++){ arr[i] = sc.nextInt(); } for(n = 0;n+Bnum<Enum;n+=Bnum){ int left = n; int right = n + Bnum-1; while(left < right){ int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } } if(n<Enum){ int left = n; int right =Enum - 1; while(left < right){ int temp = arr[left]; arr[left] = arr[right]; arr[right] = temp; left++; right--; } } for(int i = Enum-1;i>-1;i--){ System.out.print(arr[i]); if(i!=0){ System.out.print(" "); } } } } |
15.2.2 拍照队形(猿辅导笔试真题)
猿辅导公司的 N位(N>=4)研发同学组织了一次秋游活动,某同学带了个无人机在高空拍照,活动结束时,先拍了一张所有同学排成公司猴头Logo的照片, 接着有人提议再排成“猿”的首字母Y字形来拍一张合照。 用字符串中的每一个字符(不是换行符或结束符'\0')代表一位老师,输出排好后的队形。要求 Y字除去中心点外,上下半部分等高,按照从左到右,从上到下进行排序。队形中没人的部分用空格占位。 输入数据保证可以排出一个完整的Y字,即长度为 3k+1 (k>=1) 例如: 7个 x ,排成队形为(为了方便说明,这里用‘-’代替空格): x---x -x-x --x --x |