網絡上流傳的華爲筆試題練習

一、進制轉換

寫出一個程序,接受一個十六進制的數值字符串,輸出該數值的十進制字符串。(多組同時輸入 )web

輸入描述:
輸入一個十六進制的數值字符串。編程

輸出描述:
輸出該數值的十進制字符串。數組

輸入例子1:
0xAapp

輸出例子1:
10svg

# 進制轉換
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)

二、數字去重排序

明明想在學校中請一些同窗一塊兒作一項問卷調查,爲了實驗的客觀性,他先用計算機生成了N個1到1000之間的隨機整數(N≤1000),對於其中重複的數字,只保留一個,把其他相同的數去掉,不一樣的數對應着不一樣的學生的學號。而後再把這些數從小到大排序,按照排好的順序去找同窗作調查。請你協助明明完成「去重」與「排序」的工做。測試

輸入描述:
輸入多行,先輸入隨機整數的個數,再輸入相應個數的整數code

輸出描述:
返回多行,處理後的結果orm

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

輸出例子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])

三、空瓶子換水

有這樣一道智力題:「某商店規定:三個空汽水瓶能夠換一瓶汽水。小張手上有十個空汽水瓶,她最多能夠換多少瓶汽水喝?」答案是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))

四、字符集合

題目描述
輸入一個字符串,求出該字符串包含的字符集合

輸入描述:
每組數據輸入一個字符串,字符串最大長度爲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="")

五、學生成績查詢及更新

老師想知道從某某同窗當中,分數最高的是多少,如今請你編程模擬老師的詢問。固然,老師有時候須要更新某位同窗的成績.

輸入描述:
輸入包括多組測試數據。
每組輸入第一行是兩個正整數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]))

六、數據的穩定性處理

排序的穩定性是指排序前相等的數字的位置,若是排序後的位置保持不變,則稱其爲穩定的。數據的穩定性處理是指處理以後的數據仍然保持原來的位置不變。

題目:
在編程中常常會遇到對數組元素進行交換,當交換並處理後,須要按原始位置輸出時,能夠使用結構體來簡化編程。例如,對一組整數的最大元素加上次大元素的值,次大元素加上第三大元素的值,第三大元素加上第四大元素的值……最小元素加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

七、字符串截斷

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)

八、等式變換

題目描述:

輸入一個正整數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)