牛客網華為機試(https://www.nowcoder.com/exam/oj/ta?tpId=37)
按難度分為入門,簡單,中等,困難,較難五個等級
HJ7 取近似值
n = float(input())
res = lambda x:int(x+0.5)
print(res(n))
HJ9 提取不重復的整數
提取到輸入字符串後就對其進行倒置,排序時直接按ls1的順序進行排列
ls1 = list(input()[::-1])
ls2 = list(set(ls1))
ls2.sort(key=ls1.index)
print(int(''.join(ls2)))
HJ46 截取字符串
字符串切片
str1 = input()
n = int(input())
print(str1[:n])
HJ58 輸入n個整數,輸出其中最小的k個
map()函數是為了初始化n,k以及列表中的str類型為int類型
最後輸出的*nums[:k]是對num[:k]的解包。
n, k = map(int, input().split())
nums = sorted(list(map(int, input().split())))
print(*nums[:k])
HJ101 輸入整型數組和排序標識,對其元素按照升序或降序進行排序
依然是map()函數轉化類型,sort()函數排序,*解包列表。
n = int(input())
ls1 = list(map(int,input().split()))
flag = int(input())
if flag == 0:
ls1.sort()
print(*ls1)
elif flag == 1:
ls1.sort(reverse=True)
print(*ls1)
HJ1 字符串最後一個單詞的長度
ls1 = input().split()
print(len(ls1[-1]))
HJ2 計算某字符出現次數
count函數
str1 = input()
str2 = input()
print(str1.lower().count(str2.lower()))
Counter類
from collections import Counter
str1 = input().lower()
str2 = input().lower()
s = Counter(str1)
if str2 in str1:
print(s.get(str2))
else:
print('0')
for循環
str1 = input().lower()
str2 = input().lower()
count = 0
for i in str1:
if str2 == i:
count+=1
print(count)
HJ4 字符串分隔
ljust()函數是一個填充函數,str1.ljust(8,“0”)是指讓str1靠左對齊,不足8位時剩下的用0填充
str1 = input()
while len(str1)>8:
print(str1[:8])
str1 = str1[8:]
print(str1.ljust(8,"0"))
HJ5 進制轉換
十六進制轉10進制
str1 = input()
print(int(str1,16))
HJ6 質數因子
給一個整數求其質因子,180 = 22335,2 2 3 3 5就是180的質因子
1沒有質因子,2的質因子是本身
math.sqrt(n)是一個數開平方,一個數的質數最小為2,最大也不超過平方根
%是取余,//是整除
import math
n = int(input())
for i in range(2,int(math.sqrt(n))+1):
while n%i == 0:
print(i,end=' ')
n = n//i
if n >= 2:
print(n,end=' ')
HJ8 合並表記錄
dicc[i] = dicc.get(i,0) + j 的意思是向dicc中的鍵 i 取值,取不到就意味著該鍵不存在並獲取到默認值0,所以dicc[i] = 0+j 。如果鍵 i 存在,取出值假如為10,所以重新給dicc[i]賦值10+j
sorted(dict) 操作字典類型也是返回一個列表,但是默認是鍵的遞增列表。
num = int(input())
dicc = {
}
for n in range(num):
i,j = list(map(int,input().split()))
dicc[i] = dicc.get(i,0) + j
for k in sorted(dicc):
print(f'{
k} {
dicc[k]}')
HJ10 字符個數統計
str1 = input()
print(len(set(str1.replace('\n',''))))
HJ11 數字顛倒
數字顛倒用字符串切片很容易做到
下面是用數組來做的,思路是計算出str(num)的長度,把字符串後面的字符添加到列表前面來,然後輸出
nums = str(input())
i = len(nums) - 1
ans = []
while i>=0:
ans.append(nums[i])
i-=1
res = ''.join(ans)
print(res)
HJ12 字符串反轉
str1 = str(input())
print(str1[::-1])
HJ13 句子逆序
切片倒置列表
list = input().split()
print(' '.join(list[::-1]))
reserve()函數倒置列表
list = input().split()
list.reverse()
print(' '.join(list))
HJ14 字符串排序
n = int(input())
lst = []
for i in range(n):
lst.append(str(input()))
lst.sort()
for i in lst:
print(i)
HJ15 求int型正整數在內存中存儲時1的個數
這實際上是一個十進制轉化二進制,然後求字符串中某個字符的出現次數
n = int(input())
n = bin(n)
print(n.count('1'))
當然也可以換進制轉換的方法和字符出現次數的方法
n = int(input())
lst = []
while n != 0:
lst.append(n%2)
n = n//2
count = 0
for i in lst:
if i==1:
count+=1
print(count)
HJ21 簡單密碼
str1 = str(input())
dicc = {
'abc':2,
'def':3,
'ghi':4,
'jkl':5,
'mno':6,
'pqrs':7,
'tuv':8,
'wxyz':9,
}
lst = []
for i in str1:
if i.isdigit():
lst.append(int(i))
elif i.isupper():
if i == "Z":
i = "a
else:
i = chr(ord(i.lower())+1)
lst.append(i)
elif i.islower():
for j in dicc.keys():
if str(i) in j:
i = dicc[j]
lst.append(i)
print(''.join(map(str,lst)))
HJ22 汽水瓶
兩個汽水瓶也可以換一瓶汽水,最後不會剩汽水瓶。
思路:拿兩個空瓶,借一個商家的空瓶,換一瓶汽水,喝完後再還給商家一個空瓶,相當於用兩個空瓶換一瓶汽水,然後什麼也沒有得到。
for i in range(10):
n = int(input())
if n==0:
break
print(n//2)
三個汽水瓶可以換一瓶汽水,然後獲得一個空瓶,最後剩余兩個汽水瓶一定可以換一瓶汽水。
下面這個思路是:每次都以三個空瓶換一瓶汽水,然後得到一個空瓶,計算出最後總空瓶數,然後循環,最後剩余兩個汽水瓶就再換一個,否則直接輸出循環的結果。
#count_1 換到的汽水
#count_2 汽水瓶
#count_3 喝到的汽水
for i in range(10):
count_3 = 0
n = int(input())
if n == 0:
break
while n > 2:
count_1 = n//3
count_2 = n%3
count_3 = count_3 + count_1
n = count_1 + count_2
if n == 2:
count_3+=1
print(count_3)
HJ23 刪除字符串中出現次數最少的字符
先求出字符出現次數,刪除最少的字符,然後按原來的順序把字符重新輸出為字符串.
思路:求出字符出現次數,然後寫入字典,求出字典值的最小值,循環原字符串,除了出現最少的字符,其他都輸出。
str1 = input()
lst = set(list(str1))
dicc = {
}
for i in lst:
dicc[i] = str1.count(i)
MIN = min(dicc.values())
res = ''
for i in str1:
if dicc[i] != MIN:
res += i
print(res)
HJ31 單詞倒排
匹配字符串中的單詞到列表裡,然後倒置用join()方法變為字符串輸出。
思路:正則表達式匹配出單詞,然後倒置即可
import re
str1 = input()
lst1 = re.findall(r'\b[a-zA-Z]+\b',str1)
print(*lst1[::-1])
#print(*lst1[::-1]) 解包方法
HJ34 圖片整理
str1 = input()
lst = list(str1)
lst.sort(key=ord)
print(''.join(lst))