这是本人真实经历过的华为的机考题,一共两道,要求90分钟内答完。其中第一道没问题,100%通过率,第二道是80%通过率,找了大半个多小时,也没找出问题所在来,无奈放弃。大家可以帮忙看下问题在哪,可以直接在文章下方直接评论。
1.字符串操作
题目描述:给定两个字符串a b,注意:其中a字符串中有空格。求b字符串在a字符串中出现的次数。例:
输入:a="abc cc d",b="cc"。
输出:b在a中出现次数为:2次
这个题很简单,把a中空格去掉,然后再拿b中字符到a中一一进行比对。中间可使用一变量flag,如果出现不一致情况,flag就置为False。如果全程一致,即判断结束后flag依然为True,那么就记+1,继续判断。
注意特殊情况的处理:比如b字符串比a字符串要长的情况,还有b字符串比a字符串剩余要比对的字符串长的情况。我当时写的代码如下:
# 外层套一个while,目的是为了适应多组输入
while True:
try:
a = input().split()
b = input()
a = "".join(a)
res = 0
la = len(a)
lb = len(b)
# 如果输入的b字符串比a字符串还长,就直接break
if lb > la:
break
# 注意b字符串的末尾对齐a字符串的末尾
for i in range(la-lb+1):
flag = True
# 逐个判断,如果中途遇到不相等的情况,就跳出内层循环
for j in range(lb):
if a[i+j] != b[j]:
flag = False
break
if flag:
res += 1
print(res)
except Exception as e:
break
2.舞会来宾统计
题目描述:这个原题目描述很长啊,我这里简单概括一下。就是主办方要在12:00-20:00之间要举办舞会,要求在门口处统计来宾的到达时间与预计离开时间,因为舞会最大只能容纳100人(注意这里,我代码只通过80%样例可能就是因为这里100人没处理好)。比如统计格式为:12:00-14:00,意思是这个人是12:00-13:00之间来的,预计13:00-14:00之间会离开。看样例(遇到-1时结束输入):
输入: (13,15)
(13,14)
(14,16)
(14,20)
-1
输出: 12:00-13:00 0
13:00-14:00 2
14:00-15:00 3
15:00-16:00 2
16:00-17:00 1
17:00-18:00 1
18:00-19:00 1
19:00-20:00 1
我的想法是:先用一个列表将这些输入存起来,然后再构建一个列表用来存储结果,最后格式化输出一下子。
我写的代码如下,大家可以帮我挑挑毛病:
while True:
try:
# 构建一个结果数组
res = [0 for i in range(8)]
while True:
num = input()
if num == "-1":
break
num1,num2 = num.split(",")
low = int(num1)-12
high = int(num2)-12
# 这里写得不好,总感觉不对。
if max(res) == 100:
break
for i in range(low, high):
res[i] += 1
x = len(res)
# 格式化输出
for j in range(x):
print("{0}:00-{1}:00 {2}".format(j+12,j+13, res[j]))
except Exception as e:
print(e)
break
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。