当前位置:   article > 正文

网络上流传的华为笔试题练习_华为线上笔试准备内容

华为线上笔试准备内容

1、进制转换

写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。(多组同时输入 )

输入描述:
输入一个十六进制的数值字符串。

输出描述:
输出该数值的十进制字符串。

输入例子1:
0xA

输出例子1:
10

# 进制转换
string=input()
list="0123456789ABCDEF"
sum=0
for i in range(2,len(string)):
	for j in range(len(list)):
		if string[i]==list[j]:
			sum=sum+j*pow(16,len(string)-1-i)
print(sum)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2、数字去重排序

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入描述:
输入多行,先输入随机整数的个数,再输入相应个数的整数

输出描述:
返回多行,处理后的结果

输入例子1:
11
10
20
40
32
67
40
20
89
300
400
15

输出例子1:
10
15
20
32
40
67
89
300
400

# 数字去重排序
n=eval(input())
s=set()
for i in range(n):
	s.add(eval(input()))
s=sorted(s)
for i in range(len(s)):
	print(s[i])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3、空瓶子换水

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?

输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

输入例子1:
3
10
81
0

输出例子1:
1
5
40

# 空瓶子换水
def pingzi(x,s):
	sum=s
	if x==1 or x==0:
		sum=sum
		return sum
	elif x==2 or x==3:
		sum=sum+1
		return sum
	else:
		sum=sum+x//3	#第一次喝的瓶数
		x=x//3+x%3	#第一次喝完的瓶子和剩下的瓶子数量
		return pingzi(x,sum)
ls=[]
while True:
	num=eval(input())
	if num!=0:
		ls.append(num)
	else:
		break
for x in ls:
	sum=0
	print(pingzi(x,sum))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

4、字符集合

题目描述
输入一个字符串,求出该字符串包含的字符集合

输入描述:
每组数据输入一个字符串,字符串最大长度为100,且只包含字母,不可能为空串,区分大小写。

输出描述:
每组数据一行,按字符串原有的字符顺序,输出字符集合,即重复出现并靠后的字母不输出。

输入例子:
abcqweracb

输出例子:
abcqwer

s=input()
s1=[]
for i in s:
	flag=1
	for j in s1:
		if i==j:
			flag=0
	if flag==1:
		s1.append(i)
for i in s1:
	print("{}".format(i),end="")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

5、学生成绩查询及更新

老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.

输入描述:
输入包括多组测试数据。
每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。
学生ID编号从1编到N。
第二行包含N个整数,代表这N个学生的初始成绩,其中第i个数代表ID为i的学生的成绩
接下来又M行,每一行有一个字符C(只取‘Q’或‘U’),和两个正整数A,B,当C为’Q’的时候, 表示这是一条询问操作,他询问ID从A到B(包括A,B)的学生当中,成绩最高的是多少
当C为‘U’的时候,表示这是一条更新操作,要求把ID为A的学生的成绩更改为B。

输出描述:
对于每一次询问操作,在一行里面输出最高成绩.

输入例子:
5 7
1 2 3 4 5
Q 1 5
U 3 6
Q 3 4
Q 4 5
U 4 5
U 2 9
Q 1 5

输出例子:
5
6
5
9

def maxscore(ls,beg,en):
	max=int(ls[beg])
	for i in ls[beg:en+1]:
		if max<int(i):
			max=int(i)
	return max

def upgrade(ls,A,B):
	ls[A]=B
	return ls

#取出N,M
N_M=input()
N_M=N_M.split(" ")
N,M=int(N_M[0]),int(N_M[1])

#取出学生成绩
stu=input()
stu=stu.split(" ")		

# 数据查询及更新
for x in range(M):
	string=input()
	string=string.split(" ")
	if string[0]=="Q":
		print(maxscore(stu,int(string[1]),int(string[2])))
	else:
		ls=upgrade(stu,int(string[1]),int(string[2]))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

6、数据的稳定性处理

排序的稳定性是指排序前相等的数字的位置,如果排序后的位置保持不变,则称其为稳定的。数据的稳定性处理是指处理之后的数据仍然保持原来的位置不变。

题目:
在编程中经常会遇到对数组元素进行交换,当交换并处理后,需要按原始位置输出时,可以使用结构体来简化编程。例如,对一组整数的最大元素加上次大元素的值,次大元素加上第三大元素的值,第三大元素加上第四大元素的值……最小元素加0,依次对每一个元素进行处理,处理完成后按照原始数组的元素位置输出处理结果。

分析:使用类创建结构体,使用列表创建结构体数组。稳定性排序与idx有关。

class mydata():
	def __init__(self):
		pass
	def struct(self,value,idx):
		self.value=value
		self.idx=idx

#输入的数字个数
n=eval(input())

# 输入数字大小
struct=[]
for i in range(n):
	struct.append(mydata())
str_input=input()
str_input=str_input.split(" ")
for i in range(n):
	struct[i].value=eval(str_input[i])
	struct[i].idx=i

# 数字处理
for i in range(n):
	for j in range(0,n-1-i):
		if struct[j].value<struct[j+1].value:
			struct[j],struct[j+1]=struct[j+1],struct[j]
for i in range(n):
	if i<n-1:
		struct[i].value=struct[i].value+struct[i+1].value
	else:
		pass
for i in range(n):
	for j in range(n):
		if i!=struct[j].idx:
			continue
		else:
			print("{}".format(struct[j].value),end=" ")
			break
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

7、字符串截断

2015年华为机考题第一题:
按要求分解字符串,输入两个数M,N;M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0。例如:输入2,8, “abc” ,“123456789”,则输出为“abc00000”,“12345678“,”90000000”

### 字符串截断处理

## 截断处理
def jieduan(string,N):
	if len(string)<=N:
		string=string+'0'*(N-len(string))
		print(string)
	else:
		print(string[0:8])
		return jieduan(string[8:],N)

# 输入M,N
M=eval(input())
N=eval(input())
str1=[]
for i in range(M):
	str1.append(input())
for i in range(M):
	jieduan(str1[i],N)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

8、等式变换

题目描述:

输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。
1 2 3 4 5 6 7 8 9 = X
比如:
12-34+5-67+89 = 5
1+23+4-5+6-7-8-9 = 5
请编写程序,统计满足输入整数的所有整数个数。
输入: 正整数,等式右边的数字
输出: 使该等式成立的个数
样例输入:5
样例输出:21

x=eval(input())
str1="1 2 3 4 5 6 7 8 9"
str2=" +-"
cnt=0
for i1 in str2:
	for i3 in str2:
		for i5 in str2:
			for i7 in str2:
				for i9 in str2:
					for i11 in str2:
						for i13 in str2:
							for i15 in str2:
								str1=str1[0]+i1+str1[2]+i3+str1[4]+i5+str1[6]+i7+str1[8]+i9+str1[10]+i11+str1[12]+i13+str1[14]+i15+str1[16]
								str3=""
								for i in str1:
									if i!=" ":
										str3=str3+i
								if eval(str3)==x:
									cnt+=1
									print("{} = {}".format(str3,x))
print(cnt)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号