H

华为2019年3月27日实习生笔试题及解答

3月27日做了华为笔试,3道题2小时。当时没有拍照,现在凭记忆将题目和代码叙述一遍,方便后人。前面将把三道题分别列一下,供后来者自己做。在后面说明一下自己的写法

第一题:题目说的比较复杂,读懂题意之后大致是,9个字符一组,每组的第一个字符是标志位,后面8个字符是地址。如果标志位是0,地址逆序,标志位是1地址不变。输入说明:一个字符串,有多组字符,中间没有空格。输出说明:输出最后的地址,每组地址用空格隔开,最后一个输出不需要空格。时间:C/C++1秒其他2秒

第二题:简而言之就是TSP问题。蜂巢在坐标(0,0)的位置,有五处花丛,蜜蜂从蜂巢出发,要把五处花丛的花蜜采完再回到蜂巢,最短距离是多少。输入说明:一行输入,10个数分别是五处花丛的坐标(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5),用空格隔开。输出说明:输出最短距离,距离向下取整。时间:C/C++5秒其他10秒

第三题:切水果游戏。有一个40×50的方格,里面有n(1≤n≤36)个水果,每一刀可以横切,竖切以及左斜切与右斜切四种方式。想要切完所有水果,最少需要多少刀。输入说明:第一行是说过个数n,接下来的n行是水果的横纵坐标。输出说明:输出最少需要的刀数。(PS:原题有图,这里无图解释一下切割方式,横切就是所有x相同的水果可以一刀切完,纵切就是y相同,左斜切就是x-y相同,右斜切就是x+y相同)。时间:C/C++3秒其他6秒

下面是各题做法和思路:

第一题:题目说的比较复杂,读懂题意之后大致是,9个字符一组,每组的第一个字符是标志位,后面8个字符是地址。如果标志位是0,地址逆序,标志位是1地址不变。输入说明:一个字符串,有多组字符,中间没有空格。输出说明:输出最后的地址,每组地址用空格隔开,最后一个输出不需要空格。

解答:第一题很简单,9个一组得读取,判断第一个是0还是1即可。5分钟内即可AC。


   
   
   
   
  1. # -*- coding:utf8 -*-
  2. n = int(input())
  3. strs = input()
  4. for i in range(n):
  5. s = strs[ 9*i: 9*i+ 9] # 9个一组得读取
  6. if s[ 0] == '0':
  7. s = s[ 1:]
  8. s = s[:: -1] # 逆序
  9. else:
  10. s = s[ 1:]
  11. print(s, end= ' ') # 空格输出

第二题:简而言之就是TSP问题。蜂巢在坐标(0,0)的位置,有五处花丛,蜜蜂从蜂巢出发,要把五处花丛的花蜜采完再回到蜂巢,最短距离是多少。输入说明:一行输入,10个数分别是五处花丛的坐标(x1,y1,x2,y2,x3,y3,x4,y4,x5,y5),用空格隔开。输出说明:输出最短距离,距离向下取整。

解答:一开始就想到了全排列之后贪心算法取最小,虽然觉得方法太low了,但是让我一下子写出蚁群之类的觉得记忆模糊就很纠结。后来发现这道题给了10秒的运行时间,妥妥的决定用全排列了。思路:先用全排列的方式获取蜜蜂访问5个花丛的所有可能顺序,之后计算每个路径长度取最小。


   
   
   
   
  1. # -*- coding:utf8 -*-
  2. from math import sqrt
  3. line = input().strip().split()
  4. n = list(map(int, line))
  5. n = [int(i) for i in line]
  6. nums = [[ 0, 0], [n[ 0],n[ 1]], [n[ 2],n[ 3]], [n[ 4],n[ 5]], [n[ 6],n[ 7]], [n[ 8],n[ 9]]]
  7. # 以下为插入的方式获取全排列的代码。没看过别人的,自己想到的。
  8. # 后来看网上说,递归获取全排列更常见,有兴趣的可以自己去搜一下。
  9. order = [[ 1]]
  10. for i in range( 2, 6):
  11. lens = len(order)
  12. j = 0
  13. while j < lens:
  14. for k in range(i -1):
  15. tmp = order[j][:] #
  16. order.append(tmp)
  17. order[ -1].insert(k, i)
  18. order[j].append(i)
  19. j += 1
  20. # 接下来是制作距离矩阵
  21. dist = [[ 0] * 6 for i in range( 6)]
  22. for i in range( 6):
  23. for j in range( 6):
  24. if dist[i][j] == 0:
  25. dist[i][j] = sqrt((nums[i][ 0]-nums[j][ 0])** 2 + (nums[i][ 1]-nums[j][ 1])** 2)
  26. else:
  27. dist[i][j] = dist[j][i]
  28. # 贪心算法取最小
  29. minVal = 0
  30. for path in order:
  31. sums = dist[ 0][path[ 0]]
  32. for i in range( 4):
  33. sums += dist[path[i]][path[i+ 1]]
  34. sums += dist[path[ 4]][ 0]
  35. if minVal > sums or minVal == 0:
  36. minVal = sums
  37. print(int(minVal))

第三题:切水果游戏。有一个40×50的方格,里面有n(1≤n≤36)个水果,每一刀可以横切,竖切以及左斜切与右斜切四种方式。想要切完所有水果,最少需要多少刀。输入说明:第一行是说过个数n,接下来的n行是水果的横纵坐标。输出说明:输出最少需要的刀数。(PS:原题有图,这里无图解释一下切割方式,横切就是所有x相同的水果可以一刀切完,纵切就是y相同,左斜切就是x-y相同,右斜切就是x+y相同)。时间:C/C++3秒其他6秒。

解答:当时用的贪心算法,只通过了70%,后来想到了动态规划算法,虽然没试过但是个人感觉应该可以AC。和LeetCode零钱兑换问题差不多的思路。


   
   
   
   
  1. # -*- coding:utf8 -*-
  2. # 40 * 50的方格
  3. from random import randint
  4. # 动态规划算法。对于一个点,四种切法去除被切除的点即可获得下一次的点集。加上1即可
  5. def dp(points):
  6. if len(points) <= 1:
  7. return len(points)
  8. first = points[ 0]
  9. row = [i for i in points if i[ 0] != first[ 0]]
  10. cntRow = dp(row)
  11. col = [i for i in points if i[ 1] != first[ 1]]
  12. cntCol = dp(col)
  13. left = [i for i in points if i[ 2] != first[ 2]]
  14. cntLeft = dp(left)
  15. right = [i for i in points if i[ 3] != first[ 3]]
  16. cntRight = dp(right)
  17. return 1 + min(cntRow, cntCol, cntLeft, cntRight)
  18. # 贪心算法。假设只能选择一种方式切,选择刀数最少的
  19. def greedyOne(points):
  20. x = [i[ 0] for i in points]
  21. y = [i[ 1] for i in points]
  22. l = [i[ 2] for i in points]
  23. r = [i[ 3] for i in points]
  24. return min(len(set(x)), len(set(y)), len(set(l)), len(set(r)))
  25. n = int(input())
  26. points = []
  27. for i in range(n):
  28. line = input().strip().split()
  29. x = int(line[ 0])
  30. y = int(line[ 1])
  31. l = y - x
  32. r = x + y
  33. points.append([x, y, l, r])
  34. '''
  35. # 此部分为随机获取点值,确定自己的动态规划算法是否最优
  36. n = 15
  37. for i in range(10):
  38. points = []
  39. for j in range(n):
  40. x = randint(0,40)
  41. y = randint(0,50)
  42. l = y - x
  43. r = x + y
  44. points.append([x, y, l, r])
  45. res1 = dp(points)
  46. res2 = greedyOne(points)
  47. print('dp is %d, greedy is %d'%(res1, res2))
  48. if res1 > res2:
  49. print(points)
  50. '''

 

    
珞狮南路一已逝儿子托梦母亲说在水里难受,家人抽干池塘竟然... 继续 · 顶新


	
  • 上一页
  • 1
  • 下一页

华为2019实习生招聘软件编程题

03-22 阅读数 4486

华为2019实习生招聘软件编程题题目这里就不再重复,当时只ac了两题,第三题是实现一个高精度乘法,由于调试的时候,一直有个bug没搞出来,后来才发现是模拟手算的一个双重循环中 for(inti=0;i... 博文 来自: Awille的博客

		



		

Python从入门到实战 基础入门视频教程(讲解超细致)

Python基础入门视频教程:本课程从Python入门到纯Python项目实战。超100以上课时,内容非常详细,覆盖了Python知识的方方面面,学完后不仅对Python知识有个系统化的了解,更能利用Python做出类似于“密码加密存储管理系统”、“2048游戏”这种实际项目。让你从Python小白编程大牛! 学院 讲师: 黄勇

		



		


      
MagnumLu关注
MagnumLu

93篇文章

排名:千里之外

kallenhy关注
kallenhy

4篇文章

排名:千里之外

tkzc_csk关注
tkzc_csk

275篇文章

排名:千里之外

strivinging关注
strivinging

476篇文章

排名:6000+

在珞狮南路,还在拿五六千工资?试试这个,收入提高好几倍 技有 · 鹓鶵
		



		



		



		



		

在珞狮南路,还在拿五六千工资?试试这个,收入提高好几倍 技有 · 鹓鶵
		



		



		



		



		

珞狮南路一已逝儿子托梦母亲说在水里难受,家人抽干池塘竟然... 继续 · 顶新
		



		



		



		



		

珞狮南路一已逝儿子托梦母亲说在水里难受,家人抽干池塘竟然... 继续 · 顶新
		



		



		



		



		

早晚喝点它,逼出体内十年湿气,越喝越漂亮! 浩然川调 · 鹓鶵
		



		



		



		



			

一刀一怪随便点,装备满地随便捡!

			



		



		



		



		

开局一把刀,神装全靠秒!传奇我就服这款

		



		



		



		



		

我的天!一刀一怪,全屏掉落,神装爆不停!

		



		



		



		



		



		



		

设置源:
[base-src]
name=CentOS-5.4 - Base src -
baseurl=http://vault.ce…


博文
来自: linux/unix



		

简言之 就是找环(每条边只走一次,两两可达)
孤立的一个点也是一个连通分量
 
使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)
 
定义:
int Ti…


博文
来自: 九野的博客



		

抓包工具有很多,小到最常用的web调试工具firebug,达到通用的强大的抓包工具wireshark.为什么使用fiddler?原因如下:
a.Firebug虽然可以抓包…


博文
来自: 专注、专心



		

文本仿照了 找事吧app 附近三公里功能,并感谢找事吧数据的提供。考虑到数据的私密性,本文贴出的代码并没有贴出请求URL,敬…


博文
来自: 阿东



		

DirectX修复工具最新版:DirectX Repair V3.8 增强版  NEW!

版本号:V3.8.0.11638

大小: 107MB/7z格式压缩,18…


博文
来自: VBcom的专栏



		



		

查了一…


博文
来自: Gavin的博客



		

核心Spring框架一个module spring-boot-base
service和dao一个module server-core
提供系统…


博文
来自: 开发随笔



		

Docker的三大核心概念:镜像、容器、仓库
镜像:类似虚拟机的镜像、用俗话说就是安装文件。
容器:类似一个轻量…


博文
来自: 我走小路的博客



		



		

bsgs算法,又称大小步算法(某大神称拔山盖世算法)。
主要用来解决
  A^x=B(mod C)(C是质数),都是整数,已知A、B、C求x。(poj 2417 Discrete Lo…


博文
来自: clover_hxy的博客



		

最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!

//js



博文
来自: Websites



    


        

没有更多推荐了,返回首页

你可能感兴趣的:(研究生活)