华为机试成功归来,与小伙伴们分享下经验
前段时间参加华为机试,机试通过的可以优先录取,优先选择岗位和工作地,关键是面的好,还可以谈更高的工资,最多在西安可以拿到18W。好处还是蛮多的,抱着试试看的态度就去了。哈哈,华为机试记录正式开始。
提前在网上交了简历,周围同学只要报了软件研发类的相关岗位都收到短信通知,需要用到编程的同学基本上都收到短信了。一天三波,在西工大毅字楼三楼机房,南门进去直走左拐就到了,我是第二天早上的机试,前一天已经听机试过的同学考的内容涉及数组、链表、指针、字符串、循环、枚举、排序等吧,这个估计要看人品,平时出门多扶老奶奶过马路吧。其实考过后发现这个机试跟平时做项目不一样,项目可能更多的注重实现研究所需要的某个功能不会去注意这么多细节,但是机试考的更多的是基本功。下面重点跟大家分享下上机题吧,我只列举了我抽到的三个,其他同学抽到的跟这个大同小异吧。大家自己编写下,对即将开始的面试都会有帮助的。
考试内容:数组、链表、指针、字符串、循环、枚举、排序等(从考过的同学那儿总结的可能不全)
试题结构:考试总共三道题,说是难中易,初级题(60分)、中级题(100分)、高级题(160分),最难的接近一百行,说多不多,但自己敲出来还是费了点劲,
考试时间:两个小时。平时练得少可能稍微捉鸡点。
最简单的一个
描述:10个学生考完期末考试评卷完成后,A老师需要划出及格线,要求如下:
(1) 及格线是10的倍数;
(2) 保证至少有60%的学生及格;
(3) 如果所有的学生都高于60分,则及格线为60分
输入:输入10个整数,取值0~100
输出:输出及格线,10的倍数
输入样例:61 51 49 30
20 10 70 80 90 99
输出样例:50
自己编写代码简单如下:
1. #include <stdio.h>
2.
3.
4. void bubbleSort(int arr[])
5. {
6. int i = 0;
7. int j = 0;
8. int t = 0;
9.
10. for(i = 0;i < 10; i++)
11. {
12. for(j = 0; j < (9 - i); j++)
13. {
14. if(arr[j + 1] < arr[j])
15. {
16. t = arr[j + 1];
17. arr[j + 1] = arr[j];
18. arr[j] = t;
19. }
20. }
21. }
22. }
23.
24. int getPassLine(int a[])
25. {
26. int i = 0;
27.
28. bubbleSort(a);
29.
30. if (a[0] >= 60)
31. {
32. return 60;
33. }
34. else
35. {
36. return ((a[4] / 10) * 10);
37. }
38.
39. }
40.
41.
42.
43. int main()
44. {
45. int a[10] = {0};
46.
47. scanf("%d %d %d %d %d %d %d %d %d %d", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8], &a[9]);
48.
49. printf("%d", getPassLine(a));
50.
51. return 0;
52. }
描述:一条长廊里依次装有n(1 ≤ n ≤ 65535)盏电灯,从头到尾编号1、2、3、…n-1、n。每盏电灯由一个拉线开关控制。开始,电灯全部关着。
有n个学生从长廊穿过。第一个学生把号码凡是1的倍数的电灯的开关拉一下;接着第二个学生把号码凡是2的倍数的电灯的开关拉一下;接着第三个学生把号码凡是3的倍数的电灯的开关拉一下;如此继续下去,最后第n个学生把号码凡是n的倍数的电灯的开关拉一下。n个学生按此规定走完后,长廊里电灯有几盏亮着。注:电灯数和学生数一致。
输入:电灯的数量
输出:亮着的电灯数量
样例输入:3
样例输出:1
答案参考:
1. #include <stdio.h>
2.
3. #define MAX_BULB_NUM 65535
4. /*
5. 功能: n个学生按规定走完后,长廊里电灯有几盏亮着。
6. 原型:
7. int GetLightLampNum(int n);
8.
9. 输入参数:
10. int n: 电灯/学生的数量。
11.
12. 返回值:
13. int: 亮着的电灯数量。
14.
15. */
16.
17. int GetLightLampNum(int n)
18. {
19. char Bulb_Flag[MAX_BULB_NUM] = {0}; //0代表灯灭,1代表灯亮
20. unsigned int i;
21. unsigned int j = 1;
22. unsigned int Count = 0;
23.
24. if ((n < 1)||(n > 65535))
25. {
26. return false;
27. }
28.
29. while ( j <= n)
30. {
31. for (int i = 1; i <= n; i++)
32. {
33. if (0 == (i%j))
34. {
35. Bulb_Flag[i-1] += 1;
36. Bulb_Flag[i-1] = Bulb_Flag[i-1]%2 ; //if操作用来反转满足条件的灯泡状态
37. }
38. }
39. j++;
40. }
41.
42. for (i = 0; i < MAX_BULB_NUM; i++)
43. {
44. if (1 == Bulb_Flag)
45. {
46. Count++;
47. }
48. }
49.
50. return Count;
51. }
52.
53. int main(void)
54. {
55. int input;
56. scanf("%d",&input);
57. printf("%d",GetLightLampNum(input));
58. }
高级题样题:地铁换乘
描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。
地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18
地铁线B(直线)经过车站:B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15
输入:输入两个不同的站名
输出:输出最少经过的站数,含输入的起点和终点,换乘站点只计算一次
输入样例:A1 A3
输出样例:3
答案参考:
1. import java.util.*;
2.
3.
4. public class Main {
5.
6. private static int INVALID_POSITION = 255;
7.
8. class BusLine {
9. String busstop[];
10. String lineName;
11.
12. public BusLine(String line) {
13. String[] stops = line.split(" ");
14. this.busstop = new String[stops.length];
15. for (int i = 0; i < stops.length; i++) {
16. this.busstop = stops;
17. lineName = stops[< span>0< span>].substring(0, 1);
18. }
19. }
20.
21. /* get the stop position from the line */
22. int getStopPosition (String point) {
23. for (int i = 0; i < busstop.length; i++) {
24. if (busstop.equals(point)) {
25. return i;
26. }
27. }
28. return INVALID_POSITION;
29. }
30.
31. int getDistance(String pointA, String pointB) {
32. int positionA = 0;
33. int positionB = 0;
34. int len = 0;
35.
36. positionA = getStopPosition(pointA);
37. positionB = getStopPosition(pointB);
38.
39. if (positionA != INVALID_POSITION && positionB != INVALID_POSITION) {
40. len = Math.abs(positionA - positionB) + 1;
41. if (lineName.equals("A") && len > (busstop.length - len + 2)) {
42. len = (busstop.length - len + 2);
43. }
44.
45. return len;
46. }
47.
48. return INVALID_POSITION;
49. }
50.
51. }
52.
53.
54. public int getRide(String pointA, String pointB) {
55. int i = 0;
56. int min = 255;
57. BusLine lineA = new BusLine("A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15 A16 A17 A18");
58. BusLine lineB = new BusLine("B1 B2 B3 B4 B5 T1 B6 B7 B8 B9 B10 T2 B11 B12 B13 B14 B15");
59.
60. int[] way = {255, 255, 255, 255, 255, 255, 255, 255};
61.
62. way[< span>0< span>] = lineA.getDistance(pointA, pointB);
63. way[< span>1< span>] = lineB.getDistance(pointA, pointB);
64.
65. way[< span>2< span>] = lineA.getDistance(pointA, "T1") + lineB.getDistance(pointB, "T1") - 1;
66. way[< span>3< span>] = lineB.getDistance(pointA, "T1") + lineA.getDistance(pointB, "T1") - 1;
67.
68. way[< span>4< span>] = lineA.getDistance(pointA, "T2") + lineB.getDistance(pointB, "T2") - 1;
69. way[< span>5< span>] = lineB.getDistance(pointA, "T2") + lineA.getDistance(pointB, "T2") - 1;
70.
71. way[< span>6< span>] = lineB.getDistance(pointA, "T1") + lineB.getDistance(pointB, "T2") + lineA.getDistance("T1", "T2") - 2;
72. way[< span>7< span>] = lineB.getDistance(pointA, "T2") + lineB.getDistance(pointB, "T1") + lineA.getDistance("T1", "T2") - 2;
73.
74. for (i = 0; i < 7; i++) {
75. if (min > way) {
76. min = way;
77. }
78. }
79.
80. return min;
81. }
82.
83. public static void main(String[] args) {
84. Main m = new Main();
85. Scanner cin = new Scanner(System.in);
86. String inputStr = cin.nextLine();
87. String stops[] = inputStr.split(" ");
88.
89. System.out.println(m.getRide(stops[< span>0< span>], stops[< span>1< span>]));
90. }
91.
92. }
其实后来发现整个过程下来还是有点紧张的。数组、链表、指针、字符串、循环、枚举、排序等内容基本上都考察到了。大家借鉴下吧。我的难度比其他同学难度大了些,最后一个当时没测试通过,回来才调过。做对了两道。加油吧,毕业季里相互分享下资料,互惠互利
感谢楼主的无私分享
?
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
*风未停 爱无止 风未止 恋相随* ~~~~等到风景都看透 也许 你会陪我看细水常流~~~~
天是蓝的,海是深的,想你是真的,嫁给你是不可能的,如果你是有钱的,也许我们还是有缘的 ##¥~1
爱来绿色建筑网http://www.archlib.com
收集绿色建筑,生态建筑,可持续建筑,绿色建筑资料图片规范实例的专业技术网站
在西工大第七年,学了点皮毛
专业翻新核弹头,潜艇抛光,回收二手航母,大修核反应堆,航天飞机保养.高空擦洗卫星积尘
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
现在表妹学校是直接上竞赛了,才初中,只不过是用pascal,不感兴趣的也不强求。
高中时候班里计算机课代表我们省计算机竞赛一等奖,大学没毕业就去欧洲读了,现在过得比我等土逼强多了。
国内的本科牛人也能拿到20k+。我当时刚来实习时候知道的。
ส็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็็
人的一生问一问能有几天? 人的一生算一算不过三天: 跑过去的是昨天,奔过来的是明天,正在走的是今天。 不要忘记昨天,认真想想明天,好好把握今天。 但愿到了明天,今天已成昨天,你依然在我身边。 春梦无痕,秋夜缠绵,如歌岁月,似水流年。 但愿到了明天,今天已成昨天,我依然在您心间。