前言:
?
多行數(shù)據(jù)需要輸入的時(shí)候可以用下面的結(jié)構(gòu):
while True:
try:
n = int(input())
s = input().split()
num = []
for i in s:
num.append(int(i))
k = int(input())
print(num[n-k])
except:
break
輸入兩組數(shù)據(jù):
1
8108
1
7
2542 4218 9064 4908 1526 6655 921
1
一次輸入兩個(gè)數(shù)組時(shí),可以用下面的輸入方式:?
n1 = int(input())
num1 = list(map(int, input().split()))
n2 = int(input())
num2 = list(map(int, input().split()))
一、機(jī)試練習(xí)篇
1、簡(jiǎn)單題
HJ1?字符串最后一個(gè)單詞的長(zhǎng)度
描述
計(jì)算字符串最后一個(gè)單詞的長(zhǎng)度,單詞以空格隔開,字符串長(zhǎng)度小于5000。(注:字符串末尾不以空格為結(jié)尾)
輸入描述:
輸入一行,代表要計(jì)算的字符串,非空,長(zhǎng)度小于5000。
輸出描述:
輸出一個(gè)整數(shù),表示輸入字符串最后一個(gè)單詞的長(zhǎng)度。
示例1:
輸入:
hello nowcoder
輸出:
8
說明:
最后一個(gè)單詞為nowcoder,長(zhǎng)度為8
實(shí)現(xiàn)代碼:
s = input()
s_list = s.split(' ')
print(len(s_list[-1]))
?HJ2?計(jì)算某字符出現(xiàn)次數(shù)
描述
寫出一個(gè)程序,接受一個(gè)由字母、數(shù)字和空格組成的字符串,和一個(gè)字符,然后輸出輸入字符串中該字符的出現(xiàn)次數(shù)。(不區(qū)分大小寫字母)
數(shù)據(jù)范圍:?1≤?≤1000?1≤n≤1000?
輸入描述:
第一行輸入一個(gè)由字母、數(shù)字和空格組成的字符串,第二行輸入一個(gè)字符(保證該字符不為空格)。
輸出描述:
輸出輸入字符串中含有該字符的個(gè)數(shù)。(不區(qū)分大小寫字母)
示例1文章來源:http://www.zghlxwxcb.cn/news/detail-411379.html
輸入:
ABCabc
A
輸出:
2
實(shí)現(xiàn)代碼:?
s1 = input()
s2 = input()
count = 0
for i in s1:
if(s2.upper() == i.upper()):
count += 1
print(count)
HJ4?字符串分隔?
描述
?輸入一個(gè)字符串,請(qǐng)按長(zhǎng)度為8拆分每個(gè)輸入字符串并進(jìn)行輸出;
?長(zhǎng)度不是8整數(shù)倍的字符串請(qǐng)?jiān)诤竺嫜a(bǔ)數(shù)字0,空字符串不處理。
輸入描述:
連續(xù)輸入字符串(每個(gè)字符串長(zhǎng)度小于等于100)
輸出描述:
依次輸出所有分割后的長(zhǎng)度為8的新字符串
示例1:
輸入:
abc
輸出:
abc00000
實(shí)現(xiàn)代碼:?
s = input()
while len(s) > 8:
print(s[:8]) # 循環(huán)迭代每次取前8位字符
s = s[8:] #將剩余的字符串取下備下次用
if len(s) != 0:
for i in range(8 - len(s)): # 最后不足8位用0補(bǔ)齊
s += "0"
print(s)
?HJ5?進(jìn)制轉(zhuǎn)換
描述
寫出一個(gè)程序,接受一個(gè)十六進(jìn)制的數(shù),輸出該數(shù)值的十進(jìn)制表示。
數(shù)據(jù)范圍:保證結(jié)果在?1≤?≤231?1?1≤n≤231?1?
輸入描述:
輸入一個(gè)十六進(jìn)制的數(shù)值字符串。
輸出描述:
輸出該數(shù)值的十進(jìn)制字符串。不同組的測(cè)試用例用\n隔開。
示例1
輸入:
0xAA
輸出:
170
實(shí)現(xiàn)代碼:?
num = input()
print(int(num, 16)) # int()函數(shù)可以將任何進(jìn)制的數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)
# print(bin(int(num, 16))) # bin()函數(shù)可以將十進(jìn)制數(shù)據(jù)轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)
HJ6?質(zhì)數(shù)因子?
描述
功能:輸入一個(gè)正整數(shù),按照從小到大的順序輸出它的所有質(zhì)因子(重復(fù)的也要列舉)(如180的質(zhì)因子為2?2?3?3?5?)
數(shù)據(jù)范圍:?1≤?≤2×109+14?1≤n≤2×109+14?
輸入描述:
輸入一個(gè)整數(shù)
輸出描述:
按照從小到大的順序輸出它的所有質(zhì)數(shù)的因子,以空格隔開。
示例1
輸入:
180
輸出:
2 2 3 3 5
實(shí)現(xiàn)代碼:?
from math import sqrt
num = int(input())
for i in range(2, int(sqrt(num)) + 1):
# if(num % i == 0):
while(num % i == 0):
num /= i
print(i, end=' ')#不換行輸出
if(num != 1):
print(int(num))
HJ7?取近似值?
描述
寫出一個(gè)程序,接受一個(gè)正浮點(diǎn)數(shù)值,輸出該數(shù)值的近似整數(shù)值。如果小數(shù)點(diǎn)后數(shù)值大于等于 0.5 ,向上取整;小于 0.5 ,則向下取整。
數(shù)據(jù)范圍:保證輸入的數(shù)字在 32 位浮點(diǎn)數(shù)范圍內(nèi)
輸入描述:
輸入一個(gè)正浮點(diǎn)數(shù)值
輸出描述:
輸出該數(shù)值的近似整數(shù)值
示例1
輸入:
5.5
輸出:
6
說明:
0.5>=0.5,所以5.5需要向上取整為6
示例2?
輸入:
2.499
輸出:
2
說明:
0.499<0.5,2.499向下取整為2
實(shí)現(xiàn)代碼:?
num = float(input())
small = num - int(num)
if(small >= 0.5):
print(int(num) + 1)
else:
print(int(num))
HJ8?合并表記錄
描述
數(shù)據(jù)表記錄包含表索引index和數(shù)值value(int范圍的正整數(shù)),請(qǐng)對(duì)表索引相同的記錄進(jìn)行合并,即將相同索引的數(shù)值進(jìn)行求和運(yùn)算,輸出按照index值升序進(jìn)行輸出。
提示:
0 <=?index?<= 11111111
1 <= value <= 100000
輸入描述:
先輸入鍵值對(duì)的個(gè)數(shù)n(1 <= n <= 500)
接下來n行每行輸入成對(duì)的index和value值,以空格隔開
輸出描述:
輸出合并后的鍵值對(duì)(多行)
示例1
輸入:
4
0 1
0 2
1 2
3 4
輸出:
0 3
1 2
3 4
示例2?
輸入:
3
0 1
0 2
8 9
輸出:
0 3
8 9
實(shí)現(xiàn)代碼:?
num = int(input())
dic = {}
for i in range(num):
k, v = input().split() # 一行輸入多個(gè)變量
k, v = int(k), int(v)
if k not in dic:
dic[k] = v
else:
dic[k] += v
for k, v in sorted(dic.items()):#dict按key升序遍歷
print(k, v)
# dict按value升序遍歷:
# for key,value in sorted(dic.items(),key=lambda x:x[1]):
# print(key,value)
HJ9?提取不重復(fù)的整數(shù)?
描述
輸入一個(gè) int 型整數(shù),按照從右向左的閱讀順序,返回一個(gè)不含重復(fù)數(shù)字的新的整數(shù)。
保證輸入的整數(shù)最后一位不是 0 。
數(shù)據(jù)范圍:?1≤?≤108?1≤n≤108?
輸入描述:
輸入一個(gè)int型整數(shù)
輸出描述:
按照從右向左的閱讀順序,返回一個(gè)不含重復(fù)數(shù)字的新的整數(shù)
示例1
輸入:
9876673
輸出:
37689
實(shí)現(xiàn)代碼:?
num = int(input())
res = []
while(num):
temp = num % 10
if(temp not in res):
res.append(temp)
num = int(num / 10)
for i in res:
print(i, end='')
?HJ10?字符個(gè)數(shù)統(tǒng)計(jì)
描述
編寫一個(gè)函數(shù),計(jì)算字符串中含有的不同字符的個(gè)數(shù)。字符在 ASCII 碼范圍內(nèi)( 0~127 ,包括 0 和 127 ),換行表示結(jié)束符,不算在字符里。不在范圍內(nèi)的不作統(tǒng)計(jì)。多個(gè)相同的字符只計(jì)算一次
例如,對(duì)于字符串 abaca 而言,有 a、b、c 三種不同的字符,因此輸出 3 。
數(shù)據(jù)范圍:?1≤?≤500?1≤n≤500?
輸入描述:
輸入一行沒有空格的字符串。
輸出描述:
輸出 輸入字符串 中范圍在(0~127,包括0和127)字符的種數(shù)。
示例1
輸入:
abc
輸出:
3
示例2?
輸入:
aaa
輸出:
1
實(shí)現(xiàn)代碼:
s = input()
s_set = set()
for i in s:
if(i not in s_set):
s_set.add(i)
print(len(s_set))
HJ11?數(shù)字顛倒?
描述
輸入一個(gè)整數(shù),將這個(gè)整數(shù)以字符串的形式逆序輸出
程序不考慮負(fù)數(shù)的情況,若數(shù)字含有0,則逆序形式也含有0,如輸入為100,則輸出為001
數(shù)據(jù)范圍:?0≤?≤230?1?0≤n≤230?1?
輸入描述:
輸入一個(gè)int整數(shù)
輸出描述:
將這個(gè)整數(shù)以字符串的形式逆序輸出
示例1
輸入:
1516000
輸出:
0006151
示例2?
輸入:
0
輸出:
0
實(shí)現(xiàn)代碼:
num = int(input())
if(num / 10 == 0):
print(num)
res = []
while(num):
temp = num % 10
res.append(temp)
num = int(num / 10)
for i in res:
print(i, end = '')
HJ12?字符串反轉(zhuǎn)
描述
接受一個(gè)只包含小寫字母的字符串,然后輸出該字符串反轉(zhuǎn)后的字符串。(字符串長(zhǎng)度不超過1000)
輸入描述:
輸入一行,為一個(gè)只包含小寫字母的字符串。
輸出描述:
輸出該字符串反轉(zhuǎn)后的字符串。
示例1
輸入:
abcd
輸出:
dcba
?實(shí)現(xiàn)代碼:
s = input()
print(s[::-1])
HJ13?句子逆序?
描述
將一個(gè)英文語(yǔ)句以單詞為單位逆序排放。例如“I?am?a?boy”,逆序排放后為“boy?a?am?I”
所有單詞之間用一個(gè)空格隔開,語(yǔ)句中除了英文字母外,不再包含其他字符
數(shù)據(jù)范圍:輸入的字符串長(zhǎng)度滿足?1≤?≤1000?1≤n≤1000?
注意本題有多組輸入
輸入描述:
輸入一個(gè)英文語(yǔ)句,每個(gè)單詞用空格隔開。保證輸入只包含空格和字母。
輸出描述:
得到逆序的句子
示例1
輸入:
I am a boy
輸出:
boy a am I
示例2?
輸入:
nowcoder
輸出:
nowcoder
實(shí)現(xiàn)代碼:?
s = input().split(' ')
s.reverse()
print(' '.join(s))
HJ14?字符串排序?
描述
給定 n 個(gè)字符串,請(qǐng)對(duì) n 個(gè)字符串按照字典序排列。
數(shù)據(jù)范圍:?1≤?≤1000?1≤n≤1000??,字符串長(zhǎng)度滿足?1≤???≤100?1≤len≤100?
輸入描述:
輸入第一行為一個(gè)正整數(shù)n(1≤n≤1000),下面n行為n個(gè)字符串(字符串長(zhǎng)度≤100),字符串中只含有大小寫字母。
輸出描述:
數(shù)據(jù)輸出n行,輸出結(jié)果為按照字典序排列的字符串。
示例1
輸入:
9
cap
to
cat
card
two
too
up
boat
boot
輸出:
boat
boot
cap
card
cat
to
too
two
up
?實(shí)現(xiàn)代碼:
num = int(input())
dic = {}
for i in range(num):
s = input()
dic[i] = s
#sorted(dic.items(), key=lambda x:x[1])返回的是list的數(shù)組
for k, v in sorted(dic.items(), key=lambda x:x[1]):#按value值升序排列
print(v)
HJ15?求int型正整數(shù)在內(nèi)存中存儲(chǔ)時(shí)1的個(gè)數(shù)?
描述
輸入一個(gè) int 型的正整數(shù),計(jì)算出該 int 型數(shù)據(jù)在內(nèi)存中存儲(chǔ)時(shí) 1 的個(gè)數(shù)。
數(shù)據(jù)范圍:保證在 32 位整型數(shù)字范圍內(nèi)
輸入描述:
?輸入一個(gè)整數(shù)(int類型)
輸出描述:
?這個(gè)數(shù)轉(zhuǎn)換成2進(jìn)制后,輸出1的個(gè)數(shù)
示例1
輸入:
5
輸出:
2
示例2?
輸入:
0
輸出:
0
實(shí)現(xiàn)代碼:?
num = int(input())
num_bit = bin(num)[2:]
print(num_bit.count('1'))
HJ21?簡(jiǎn)單密碼?
描述
現(xiàn)在有一種密碼變換算法。
九鍵手機(jī)鍵盤上的數(shù)字與字母的對(duì)應(yīng):?1--1,?abc--2,?def--3,?ghi--4,?jkl--5,?mno--6,?pqrs--7,?tuv--8?wxyz--9,?0--0,把密碼中出現(xiàn)的小寫字母都變成九鍵鍵盤對(duì)應(yīng)的數(shù)字,如:a 變成 2,x 變成 9.
而密碼中出現(xiàn)的大寫字母則變成小寫之后往后移一位,如:X ,先變成小寫,再往后移一位,變成了 y ,例外:Z 往后移是 a 。
數(shù)字和其它的符號(hào)都不做變換。
數(shù)據(jù)范圍: 輸入的字符串長(zhǎng)度滿足?1≤?≤100?1≤n≤100?
輸入描述:
輸入一組密碼,長(zhǎng)度不超過100個(gè)字符。
輸出描述:
輸出密碼變換后的字符串
示例1
輸入:
YUANzhi1987
輸出:
zvbo9441987
實(shí)現(xiàn)代碼:?
s = input()
dic = {
"1": "1",
"a": "2",
"b": "2",
"c": "2",
"d": "3",
"e": "3",
"f": "3",
"g": "4",
"h": "4",
"i": "4",
"j": "5",
"k": "5",
"l": "5",
"m": "6",
"n": "6",
"o": "6",
"p": "7",
"q": "7",
"r": "7",
"s": "7",
"t": "8",
"u": "8",
"v": "8",
"w": "9",
"x": "9",
"y": "9",
"z": "9",
"0": "0",
}
res = ''
for i in s:
if(i.isupper()):
i = i.lower()
if(i != 'z'):
res += chr(ord(i) + 1)#得到字母的ASSIC碼再將其后移一位
else:
res += 'a'#如果是最后一個(gè)字母'z',則循環(huán)到'a'
elif(i.islower()):
res += dic[i]
else:
res += i
print(res)
HJ23?刪除字符串中出現(xiàn)次數(shù)最少的字符
描述
實(shí)現(xiàn)刪除字符串中出現(xiàn)次數(shù)最少的字符,若出現(xiàn)次數(shù)最少的字符有多個(gè),則把出現(xiàn)次數(shù)最少的字符都刪除。輸出刪除這些單詞后的字符串,字符串中其它字符保持原來的順序。
數(shù)據(jù)范圍:輸入的字符串長(zhǎng)度滿足?1≤?≤20?1≤n≤20??,保證輸入的字符串中僅出現(xiàn)小寫字母
輸入描述:
字符串只包含小寫英文字母,?不考慮非法輸入,輸入的字符串長(zhǎng)度小于等于20個(gè)字節(jié)。
輸出描述:
刪除字符串中出現(xiàn)次數(shù)最少的字符后的字符串。
示例1
輸入:
aabcddd
輸出:
aaddd
實(shí)現(xiàn)代碼:?
s = input()
dic = {}
for i in s:
if i not in dic:
dic[i] = 1
else:
dic[i] += 1
min_count = min(dic.values()) # 找出出現(xiàn)次數(shù)最少的字母
s_del = []
for k in dic:
if dic[k] == min_count:
s = s.replace(k, "") # 用空字符替換掉出現(xiàn)次數(shù)最少的字符
print(s)
HJ31?單詞倒排?
描述
對(duì)字符串中的所有單詞進(jìn)行倒排。
說明:
1、構(gòu)成單詞的字符只有26個(gè)大寫或小寫英文字母;
2、非構(gòu)成單詞的字符均視為單詞間隔符;
3、要求倒排后的單詞間隔符以一個(gè)空格表示;如果原字符串中相鄰單詞間有多個(gè)間隔符時(shí),倒排轉(zhuǎn)換后也只允許出現(xiàn)一個(gè)空格間隔符;
4、每個(gè)單詞最長(zhǎng)20個(gè)字母;
數(shù)據(jù)范圍:字符串長(zhǎng)度滿足?1≤?≤10000?1≤n≤10000?
輸入描述:
輸入一行,表示用來倒排的句子
輸出描述:
輸出句子的倒排結(jié)果
示例1
輸入:
I am a student
輸出:
student a am I
示例2?
輸入:
$bo*y gi!r#l
輸出:
l r gi y bo
實(shí)現(xiàn)代碼:?
s = input()
for i in s:
if(i.islower() == False and i.isupper() == False):
s = s.replace(i, ' ')#用空格把冗余的字符去除
res = s.split(' ')
res.reverse()
print(' '.join(res))
HJ34?圖片整理
描述
Lily上課時(shí)使用字母數(shù)字圖片教小朋友們學(xué)習(xí)英語(yǔ)單詞,每次都需要把這些圖片按照大?。ˋSCII碼值從小到大)排列收好。請(qǐng)大家給Lily幫忙,通過代碼解決。
Lily使用的圖片使用字符"A"到"Z"、"a"到"z"、"0"到"9"表示。
數(shù)據(jù)范圍:每組輸入的字符串長(zhǎng)度滿足?1≤?≤1000?1≤n≤1000?
輸入描述:
一行,一個(gè)字符串,字符串中的每個(gè)字符表示一張Lily使用的圖片。
輸出描述:
Lily的所有圖片按照從小到大的順序輸出
示例1
輸入:
Ihave1nose2hands10fingers
輸出:
0112Iaadeeefghhinnnorsssv
?實(shí)現(xiàn)代碼:
s = input()
print(''.join(sorted(s)))
HJ35?蛇形矩陣
蛇形矩陣是由1開始的自然數(shù)依次排列成的一個(gè)矩陣上三角形。
例如,當(dāng)輸入5時(shí),應(yīng)該輸出的三角形為:
1?3?6?10?15
2?5?9?14
4?8?13
7?12
11
輸入描述:
輸入正整數(shù)N(N不大于100)
輸出描述:
輸出一個(gè)N行的蛇形矩陣。
示例1
輸入:
4
輸出:
1 3 6 10
2 5 9
4 8
7
實(shí)現(xiàn)代碼:
num = int(input())
for i in range(1, num + 1):
step = i + 1# 每一行的步長(zhǎng)
start = (i * (i - 1)) // 2 + 1# 每一行的第一個(gè)值
print(start, end = '')
for j in range(2, num+2-i):#每行輸出多少個(gè)值
start += step
print('', start, end = '')
step += 1
print()#換行
HJ37?統(tǒng)計(jì)每個(gè)月兔子的總數(shù)
描述
有一種兔子,從出生后第3個(gè)月起每個(gè)月都生一只兔子,小兔子長(zhǎng)到第三個(gè)月后每個(gè)月又生一只兔子。
例子:假設(shè)一只兔子第3個(gè)月出生,那么它第5個(gè)月開始會(huì)每個(gè)月生一只兔子。
一月的時(shí)候有一只兔子,假如兔子都不死,問第n個(gè)月的兔子總數(shù)為多少?
數(shù)據(jù)范圍:輸入滿足?1≤?≤31?1≤n≤31?
輸入描述:
輸入一個(gè)int型整數(shù)表示第n個(gè)月
輸出描述:
輸出對(duì)應(yīng)的兔子總數(shù)
示例1
輸入:
3
輸出:
2
實(shí)現(xiàn)代碼:
month = int(input())
n = month - 1
def fun(n):
if(n < 2):
return 1
else:
return fun(n-1) + fun(n-2)
print(fun(n))
HJ40?統(tǒng)計(jì)字符
描述
輸入一行字符,分別統(tǒng)計(jì)出包含英文字母、空格、數(shù)字和其它字符的個(gè)數(shù)。
數(shù)據(jù)范圍:輸入的字符串長(zhǎng)度滿足?1≤?≤1000?1≤n≤1000?
輸入描述:
輸入一行字符串,可以有空格
輸出描述:
統(tǒng)計(jì)其中英文字符,空格字符,數(shù)字字符,其他字符的個(gè)數(shù)
示例1
輸入:
1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\\/;p0-=\\][
輸出:
26
3
10
12
實(shí)現(xiàn)代碼:
輸入:
1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\\/;p0-=\\][
輸出:
26
3
10
12
HJ54?表達(dá)式求值?
描述
給定一個(gè)字符串描述的算術(shù)表達(dá)式,計(jì)算出結(jié)果值。
輸入字符串長(zhǎng)度不超過 100 ,合法的字符包括?”+,?-,?*,?/,?(,?)”?,?”0-9”?。
數(shù)據(jù)范圍:運(yùn)算過程中和最終結(jié)果均滿足?∣???∣≤231?1?∣val∣≤231?1??,即只進(jìn)行整型運(yùn)算,確保輸入的表達(dá)式合法
輸入描述:
輸入算術(shù)表達(dá)式
輸出描述:
計(jì)算出結(jié)果值
示例1
輸入:
400+5
輸出:
405
?實(shí)現(xiàn)代碼:
print(eval(input()))
HJ56?完全數(shù)計(jì)算?
描述
完全數(shù)(Perfect?number),又稱完美數(shù)或完備數(shù),是一些特殊的自然數(shù)。
它所有的真因子(即除了自身以外的約數(shù))的和(即因子函數(shù)),恰好等于它本身。
例如:28,它有約數(shù)1、2、4、7、14、28,除去它本身28外,其余5個(gè)數(shù)相加,1+2+4+7+14=28。
輸入n,請(qǐng)輸出n以內(nèi)(含n)完全數(shù)的個(gè)數(shù)。
數(shù)據(jù)范圍:?1≤?≤5×105?1≤n≤5×105?
輸入描述:
輸入一個(gè)數(shù)字n
輸出描述:
輸出不超過n的完全數(shù)的個(gè)數(shù)
示例1
輸入:
1000
輸出:
3
實(shí)現(xiàn)代碼:
from math import sqrt
num = int(input())
count = 0
for i in range(1, num+1):
sum = 0
for j in range(1, i):
if(i % j == 0):
sum += j
if(sum == i):
count += 1
print(count)
?HJ62?查找輸入整數(shù)二進(jìn)制中1的個(gè)數(shù)
輸入一個(gè)正整數(shù),計(jì)算它在二進(jìn)制下的1的個(gè)數(shù)。
注意多組輸入輸出?。。。。?!
數(shù)據(jù)范圍:?1≤?≤231?1?1≤n≤231?1?
輸入描述:
輸入一個(gè)整數(shù)
輸出描述:
計(jì)算整數(shù)二進(jìn)制中1的個(gè)數(shù)
示例1
輸入:
5
輸出:
2
說明:
5的二進(jìn)制表示是101,有2個(gè)1
示例2?
輸入:
0
輸出:
0
實(shí)現(xiàn)代碼:
x = int(input())
y = int(input())
s1 = bin(x)[2:]
s2 = bin(y)[2:]
print(s1.count('1'))
print(s2.count('1'))
HJ73?計(jì)算日期到天數(shù)轉(zhuǎn)換?
描述
根據(jù)輸入的日期,計(jì)算是這一年的第幾天。
保證年份為4位數(shù)且日期合法。
進(jìn)階:時(shí)間復(fù)雜度:?(?)?O(n)?,空間復(fù)雜度:?(1)?O(1)?
輸入描述:
輸入一行,每行空格分割,分別是年,月,日
輸出描述:
輸出是這一年的第幾天
示例1
輸入:
2012 12 31
輸出:
366
示例2?
輸入:
1982 3 4
輸出:
63
實(shí)現(xiàn)代碼:?
s = input().split(' ')
y, m, d = int(s[0]), int(s[1]), int(s[2])
month = [31,28,31,30,31,30,31,31,30,31,30,31]
total_days = sum(month[:m-1]) + d
if(m > 2 and (y%4==0 and y%100!=0 or y%400==0)):#出現(xiàn)閏年的情況
total_days += 1
print(total_days)
?HJ81?字符串字符匹配
描述
判斷短字符串S中的所有字符是否在長(zhǎng)字符串T中全部出現(xiàn)。
請(qǐng)注意本題有多組樣例輸入。
數(shù)據(jù)范圍:1≤???(?),???(?)≤200?1≤len(S),len(T)≤200?
進(jìn)階:時(shí)間復(fù)雜度:?(?)?O(n)?,空間復(fù)雜度:?(?)?O(n)?
輸入描述:
輸入兩個(gè)字符串。第一個(gè)為短字符串,第二個(gè)為長(zhǎng)字符串。兩個(gè)字符串均由小寫字母組成。
輸出描述:
如果短字符串的所有字符均在長(zhǎng)字符串中出現(xiàn)過,則輸出字符串"true"。否則輸出字符串"false"。
示例1
輸入:
bc
abc
輸出:
true
說明:
其中abc含有bc,輸出"true"
實(shí)現(xiàn)代碼:?
s1 = list(set(input()))
s2 = list(set(input()))
for i in s1:
if i not in s2:
print("false")
break
# 直到最后一個(gè)字符都在s2里,那么我們稱字符串匹配成功
if i == s1[-1] and i in s2:
print("true")
HJ84?統(tǒng)計(jì)大寫字母?jìng)€(gè)數(shù)?
描述
找出給定字符串中大寫字符(即'A'-'Z')的個(gè)數(shù)。
數(shù)據(jù)范圍:字符串長(zhǎng)度:1≤∣?∣≤250?1≤∣s∣≤250?
字符串中可能包含空格或其他字符
進(jìn)階:時(shí)間復(fù)雜度:?(?)?O(n)?,空間復(fù)雜度:?(?)?O(n)?
輸入描述:
對(duì)于每組樣例,輸入一行,代表待統(tǒng)計(jì)的字符串
輸出描述:
輸出一個(gè)整數(shù),代表字符串中大寫字母的個(gè)數(shù)
示例1
輸入:
A 1 0 1 1150175017(&^%&$vabovbaoadd 123#$%#%#O
輸出:
2
實(shí)現(xiàn)代碼:?
s = input()
cnt = 0
for i in s:
if(i.isupper()):
cnt += 1
print(cnt)
?HJ85?最長(zhǎng)回文子串
描述
給定一個(gè)僅包含小寫字母的字符串,求它的最長(zhǎng)回文子串的長(zhǎng)度。
所謂回文串,指左右對(duì)稱的字符串。
所謂子串,指一個(gè)字符串刪掉其部分前綴和后綴(也可以不刪)的字符串
數(shù)據(jù)范圍:字符串長(zhǎng)度1≤?≤350?1≤s≤350?
進(jìn)階:時(shí)間復(fù)雜度:?(?)?O(n)?,空間復(fù)雜度:?(?)?O(n)?
輸入描述:
輸入一個(gè)僅包含小寫字母的字符串
輸出描述:
返回最長(zhǎng)回文子串的長(zhǎng)度
示例1
輸入:
cdabbacc
輸出:
4
說明:
abba為最長(zhǎng)的回文子串
實(shí)現(xiàn)代碼:?
def isHuiWenStr(subStr:str):#判斷當(dāng)前子串是不是回文字符
start = 0
end = len(subStr) - 1
while(start < end):
if(subStr[start] != subStr[end]):
return False
start = start + 1
end = end - 1
return True
s = input()
if(len(s) < 2):
print(s)
maxLen = 1#記錄最大回文字符長(zhǎng)度
for i in range(len(s)-1):
for j in range(i + 1, len(s)):
if((j - i + 1) > maxLen and isHuiWenStr(s[i:j+1])):
maxLen = j - i + 1
print(maxLen)
HJ86?求最大連續(xù)bit數(shù)?
描述
求一個(gè)int類型數(shù)字對(duì)應(yīng)的二進(jìn)制數(shù)字中1的最大連續(xù)數(shù),例如3的二進(jìn)制為00000011,最大連續(xù)2個(gè)1
數(shù)據(jù)范圍:數(shù)據(jù)組數(shù):1≤?≤5?1≤t≤5?,1≤?≤500000?1≤n≤500000?
進(jìn)階:時(shí)間復(fù)雜度:?(????)?O(logn)?,空間復(fù)雜度:?(1)?O(1)?
輸入描述:
輸入一個(gè)int類型數(shù)字
輸出描述:
輸出轉(zhuǎn)成二進(jìn)制之后連續(xù)1的個(gè)數(shù)
示例1
輸入:
200
輸出:
2
說明:
200的二進(jìn)制表示是11001000,最多有2個(gè)連續(xù)的1。
實(shí)現(xiàn)代碼:
num = int(input())
s = bin(num)[2:]
res = 1
temp = 1
for i in range(len(s)):
if(s[i] == '1'):
for j in range(i + 1, len(s)):
if(s[i] == s[j]):
temp += 1
else:
break
res = max(res, temp)
temp = 1
print(res)
?HJ94?記票統(tǒng)計(jì)
描述
請(qǐng)實(shí)現(xiàn)一個(gè)計(jì)票統(tǒng)計(jì)系統(tǒng)。你會(huì)收到很多投票,其中有合法的也有不合法的,請(qǐng)統(tǒng)計(jì)每個(gè)候選人得票的數(shù)量以及不合法的票數(shù)。
(注:不合法的投票指的是投票的名字不存在n個(gè)候選人的名字中?。。?/p>
數(shù)據(jù)范圍:每組輸入中候選人數(shù)量滿足?1≤?≤100?1≤n≤100??,總票數(shù)量滿足?1≤?≤100?1≤n≤100?
輸入描述:
第一行輸入候選人的人數(shù)n,第二行輸入n個(gè)候選人的名字(均為大寫字母的字符串),第三行輸入投票人的人數(shù),第四行輸入投票。
輸出描述:
按照輸入的順序,每行輸出候選人的名字和得票數(shù)量(以" : "隔開,注:英文冒號(hào)左右兩邊都有一個(gè)空格?。詈笠恍休敵霾缓戏ǖ钠睌?shù),格式為"Invalid : "+不合法的票數(shù)。
示例1
輸入:
4
A B C D
8
A D E CF A GG A B
輸出:
A : 3
B : 1
C : 0
D : 1
Invalid : 3
說明:
E CF GG三張票是無(wú)效的,所以Invalid的數(shù)量是3.
實(shí)現(xiàn)代碼:?
n1 = int(input())
s1 = input().split(" ")
n2 = int(input())
s2 = input().split(" ")
dic = {}
for i in s1:
dic[i] = 0
for k in dic:#統(tǒng)計(jì)票數(shù)
for i in s2:
if i == k:
dic[k] += 1
sum = 0
for k, v in dic.items():#統(tǒng)計(jì)總的有效票數(shù)
sum += v
dic.update({'Invalid': len(s2) - sum})#更新無(wú)效票數(shù)
for k, v in dic.items():
print(k, ":", v)
HJ96?表示數(shù)字?
描述
將一個(gè)字符串中所有的整數(shù)前后加上符號(hào)“*”,其他字符保持不變。連續(xù)的數(shù)字視為一個(gè)整數(shù)。
數(shù)據(jù)范圍:字符串長(zhǎng)度滿足?1≤?≤100?1≤n≤100?
輸入描述:
輸入一個(gè)字符串
輸出描述:
字符中所有出現(xiàn)的數(shù)字前后加上符號(hào)“*”,其他字符保持不變
示例1
輸入:
Jkdi234klowe90a3
輸出:
Jkdi*234*klowe*90*a*3*
實(shí)現(xiàn)代碼:?
s = input()
res = ""
if s[0] in {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}:
res = "*" + res
res += s[0]
else:
res += s[0]
for i in range(1, len(s)):
if (
s[i - 1] in {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
and s[i] not in {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
or s[i] in {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
and s[i - 1] not in {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}
):
res += "*"
res += s[i]
else:
res += s[i]
if s[-1] in {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"}:
res += "*"
print(res)
HJ102?字符統(tǒng)計(jì)?
描述
輸入一個(gè)只包含小寫英文字母和數(shù)字的字符串,按照不同字符統(tǒng)計(jì)個(gè)數(shù)由多到少輸出統(tǒng)計(jì)結(jié)果,如果統(tǒng)計(jì)的個(gè)數(shù)相同,則按照ASCII碼由小到大排序輸出。
數(shù)據(jù)范圍:字符串長(zhǎng)度滿足?1≤???(???)≤1000?1≤len(str)≤1000?
輸入描述:
一個(gè)只包含小寫英文字母和數(shù)字的字符串。
輸出描述:
一個(gè)字符串,為不同字母出現(xiàn)次數(shù)的降序表示。若出現(xiàn)次數(shù)相同,則按ASCII碼的升序輸出。
示例1
輸入:
aaddccdc
輸出:
cda
說明:
樣例里,c和d出現(xiàn)3次,a出現(xiàn)2次,但c的ASCII碼比d小,所以先輸出c,再輸出d,最后輸出a.
?實(shí)現(xiàn)代碼:
s = input()
dic = {}
for i in s:
if i not in dic:
dic[i] = 1
else:
dic[i] += 1
dic = sorted(dic.items(), key=lambda x: x[0]) # key先按字符ASCII排序
dic = sorted(dic, key=lambda x: x[1], reverse=True) # 按統(tǒng)計(jì)數(shù)目value排序,再按降序排列
for k, v in dic:
print("".join(k), end="")
?HJ106?字符逆序
描述
將一個(gè)字符串str的內(nèi)容顛倒過來,并輸出。
數(shù)據(jù)范圍:1≤???(???)≤10000?1≤len(str)≤10000?
輸入描述:
輸入一個(gè)字符串,可以有空格
輸出描述:
輸出逆序的字符串
示例1
輸入:
I am a student
輸出:
tneduts a ma I
示例2?
輸入:
nowcoder
輸出:
redocwon
實(shí)現(xiàn)代碼:?
s = input().split(' ')
s.reverse()
for i in s:
print(''.join(i[::-1]), end = ' ')
HJ60?查找組成一個(gè)偶數(shù)最接近的兩個(gè)素?cái)?shù)?
描述
任意一個(gè)偶數(shù)(大于2)都可以由2個(gè)素?cái)?shù)組成,組成偶數(shù)的2個(gè)素?cái)?shù)有很多種情況,本題目要求輸出組成指定偶數(shù)的兩個(gè)素?cái)?shù)差值最小的素?cái)?shù)對(duì)。
數(shù)據(jù)范圍:輸入的數(shù)據(jù)滿足?4≤?≤1000?4≤n≤1000?
輸入描述:
輸入一個(gè)大于2的偶數(shù)
輸出描述:
從小到大輸出兩個(gè)素?cái)?shù)
示例1
輸入:
20
輸出:
7
13
示例2?
輸入:
4
輸出:
2
2
實(shí)現(xiàn)代碼:?
def prime(num): # 判斷是否為素?cái)?shù)
flag = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
flag = False
break
return flag
n = int(input())
res = []
for i in range(2, int(n / 2 + 1)):#從中間像兩邊靠,最終結(jié)果就是距離最短的兩個(gè)素?cái)?shù)
if prime(i) and prime(n - i):
res = [i, n - i]
for j in res:
print(j)
HJ72?百錢買百雞問題?
描述
公元五世紀(jì),我國(guó)古代數(shù)學(xué)家張丘建在《算經(jīng)》一書中提出了“百雞問題”:雞翁一值錢五,雞母一值錢三,雞雛三值錢一。百錢買百雞,問雞翁、雞母、雞雛各幾何?
現(xiàn)要求你打印出所有花一百元買一百只雞的方式。
輸入描述:
輸入任何一個(gè)整數(shù),即可運(yùn)行程序。
輸出描述:
?輸出有數(shù)行,每行三個(gè)整數(shù),分別代表雞翁,母雞,雞雛的數(shù)量
示例1
輸入:
1
輸出:
0 25 75
4 18 78
8 11 81
12 4 84
思路:
- 題目翻譯之后的意思是,公雞一只5元,母雞一只3元,小雞三只1元
- 用100元買100只雞,給出所有的購(gòu)買方案
實(shí)現(xiàn)代碼:?
while True:
try:
n = int(input())
for i in range(21):
for j in range(34):
for k in range(101):
if 5*i + 3*j + 1*k/3 == 100 and i + j + k == 100:
print(i, j, k)
except:
break
HJ76?尼科徹斯定理?
描述
驗(yàn)證尼科徹斯定理,即:任何一個(gè)整數(shù)m的立方都可以寫成m個(gè)連續(xù)奇數(shù)之和。
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
輸入一個(gè)正整數(shù)m(m≤100),將m的立方寫成m個(gè)連續(xù)奇數(shù)之和的形式輸出。
數(shù)據(jù)范圍:1≤?≤100?1≤m≤100?
進(jìn)階:時(shí)間復(fù)雜度:?(?)?O(m)?,空間復(fù)雜度:?(1)?O(1)?
輸入描述:
輸入一個(gè)int整數(shù)
輸出描述:
輸出分解后的string
示例1
輸入:
6
輸出:
31+33+35+37+39+41
實(shí)現(xiàn)代碼:
n = int(input())
for i in range(n*n*n):
if(n*i + n*(n-1) == n*n*n):#連續(xù)的n個(gè)奇數(shù)相加:i+(i+2)+...+(i+(n-1)*2) = n*i + n(n-1)
print(i, end='')
for j in range(1,n):#相等開始輸出連續(xù)n-1個(gè)數(shù)字
print('+' + str(i + 2*j), end='')
HJ80?整型數(shù)組合并?
描述
題目標(biāo)題:
將兩個(gè)整型數(shù)組按照升序合并,并且過濾掉重復(fù)數(shù)組元素。
輸出時(shí)相鄰兩數(shù)之間沒有空格。
輸入描述:
輸入說明,按下列順序輸入:
1?輸入第一個(gè)數(shù)組的個(gè)數(shù)
2?輸入第一個(gè)數(shù)組的數(shù)值
3?輸入第二個(gè)數(shù)組的個(gè)數(shù)
4?輸入第二個(gè)數(shù)組的數(shù)值
輸出描述:
輸出合并之后的數(shù)組
示例1
輸入:
3
1 2 5
4
-1 0 3 2
輸出:
-101235
實(shí)現(xiàn)代碼:?
n1 = int(input())
num1 = list(map(int, input().split()))
n2 = int(input())
num2 = list(map(int, input().split()))
res = set(num1 + num2)
res = sorted(res)
for i in res:
print(i, end="")
HJ91?走方格的方案數(shù)
描述
請(qǐng)計(jì)算n*m的棋盤格子(n為橫向的格子數(shù),m為豎向的格子數(shù))從棋盤左上角出發(fā)沿著邊緣線從左上角走到右下角,總共有多少種走法,要求不能走回頭路,即:只能往右和往下走,不能往左和往上走。
注:沿棋盤格之間的邊緣線行走
數(shù)據(jù)范圍:?1≤?,?≤8?1≤n,m≤8?
輸入描述:
輸入兩個(gè)正整數(shù)n和m,用空格隔開。(1≤n,m≤8)
輸出描述:
輸出一行結(jié)果
示例1
輸入:
2 2
輸出:
6
實(shí)現(xiàn)代碼:?
def fun(x,y):
if(x == 0 or y == 0):
return 1
else:
return fun(x-1, y)+fun(x, y-1)
while True:
try:
n, m = map(int, input().split())
print(fun(n, m))
except:
break
HJ108?求最小公倍數(shù)?
正整數(shù)A和正整數(shù)B?的最小公倍數(shù)是指?能被A和B整除的最小的正整數(shù)值,設(shè)計(jì)一個(gè)算法,求輸入A和B的最小公倍數(shù)。
數(shù)據(jù)范圍:1≤?,?≤100000?1≤a,b≤100000?
輸入描述:
輸入兩個(gè)正整數(shù)A和B。
輸出描述:
輸出A和B的最小公倍數(shù)。
示例1
輸入:
5 7
輸出:
35
示例2?
輸入:
2 4
輸出:
4
思路:
?
實(shí)現(xiàn)代碼:
def gcd(m, n):#最大公約數(shù)
if(n == 0):
return m
else:
return gcd(n, m % n)
def lcm(a, b):#最小公倍數(shù)
return (a * b) / gcd(a, b)
while True:
try:
A , B = map(int, input().split())
print(int(lcm(A, B)))
except:
break
?HJ61?放蘋果
描述
把m個(gè)同樣的蘋果放在n個(gè)同樣的盤子里,允許有的盤子空著不放,問共有多少種不同的分法?
注意:如果有7個(gè)蘋果和3個(gè)盤子,(5,1,1)和(1,5,1)被視為是同一種分法。
數(shù)據(jù)范圍: 0≤m≤10?, 1≤n≤10?。
輸入描述:
輸入兩個(gè)int整數(shù)
輸出描述:
輸出結(jié)果,int型
示例1
輸入:
7 3
輸出:
8
實(shí)現(xiàn)代碼:?
def fun(m, n):#m個(gè)蘋果放入n個(gè)盤子
# 如果沒有蘋果了或只有1個(gè)蘋果,則方案數(shù)返回1;如果只有一個(gè)盤子了,剩下的蘋果必須全放盤子里,因此也只剩下一種方案
if(m == 0 or m == 1 or n == 1):
return 1
#如果盤子數(shù)量多于蘋果,說明必定有n-m個(gè)盤子會(huì)空著,因此必定的事情不會(huì)影響方案數(shù)
elif(m < n ):#當(dāng)蘋果m的個(gè)數(shù)小于盤子個(gè)數(shù)n時(shí),最少有n-m空盤子,這些空盤子對(duì)結(jié)果沒有影響,所在只要在意如何把m個(gè)蘋果放入m個(gè)盤子里
return fun(m, m)
#如果蘋果多,則要考慮盤子中是否要放蘋果,如果空一個(gè),則要遞歸(m,n-1);如果不空,則相當(dāng)于所有盤子都要放至少一個(gè)蘋果,這個(gè)條件等價(jià)于所有盤子都少掉一個(gè)蘋果的方案數(shù)
else:#當(dāng)蘋果m的個(gè)數(shù)超過盤子個(gè)數(shù)n時(shí),分盤子有空的和盤子放滿兩種情況
return fun(m, n-1) + fun(m-n, n)
while True:
try:
m, n = map(int, input().split())
print(fun(m, n))
except:
break
2、中等題
HJ26?字符串排序
描述
編寫一個(gè)程序,將輸入字符串中的字符按如下規(guī)則排序。
規(guī)則 1 :英文字母從 A 到 Z 排列,不區(qū)分大小寫。
如,輸入: Type 輸出: epTy
規(guī)則 2 :同一個(gè)英文字母的大小寫同時(shí)存在時(shí),按照輸入順序排列。
如,輸入: BabA 輸出: aABb
規(guī)則 3 :非英文字母的其它字符保持原來的位置。
?
如,輸入: By?e 輸出: Be?y
數(shù)據(jù)范圍:輸入的字符串長(zhǎng)度滿足?1≤?≤1000?1≤n≤1000?
輸入描述:
輸入字符串
輸出描述:
輸出字符串
示例1
輸入:
A Famous Saying: Much Ado About Nothing (2012/8).
輸出:
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
實(shí)現(xiàn)代碼:?
s = input()
s_char = []
res = ''
for i in s:#先篩選出來字母字符
if(i.isalpha()):
s_char.append(i)
# s_char.sort(key=lambda x: x.upper())
s_char.sort(key=lambda x:x.lower())#全轉(zhuǎn)成小寫再排序
j = 0
for i in s:
if(i.isalpha()):
res += s_char[j]
j += 1
else:
res += i
print(res)
HJ92?在字符串中找出連續(xù)最長(zhǎng)的數(shù)字串
描述
輸入一個(gè)字符串,返回其最長(zhǎng)的數(shù)字子串,以及其長(zhǎng)度。若有多個(gè)最長(zhǎng)的數(shù)字子串,則將它們?nèi)枯敵觯ò丛址南鄬?duì)位置)
本題含有多組樣例輸入。
數(shù)據(jù)范圍:字符串長(zhǎng)度?1≤?≤200?1≤n≤200??, 保證每組輸入都至少含有一個(gè)數(shù)字
輸入描述:
輸入一個(gè)字符串。1<=len(字符串)<=200
輸出描述:
輸出字符串中最長(zhǎng)的數(shù)字字符串和它的長(zhǎng)度,中間用逗號(hào)間隔。如果有相同長(zhǎng)度的串,則要一塊兒輸出(中間不要輸出空格)。
示例1
輸入:
abcd12345ed125ss123058789
a8a72a6a5yy98y65ee1r2
輸出:
123058789,9
729865,2
說明:
樣例一最長(zhǎng)的數(shù)字子串為123058789,長(zhǎng)度為9
樣例二最長(zhǎng)的數(shù)字子串有72,98,65,長(zhǎng)度都為2
?實(shí)現(xiàn)代碼:文章來源地址http://www.zghlxwxcb.cn/news/detail-411379.html
while True:
try:
s = input()
dic = {}
for i in s:
if i.isdigit() == False:
s = s.replace(i, " ")
res = s.split(" ")
for j in res:
dic[j] = len(j)
dic = sorted(dic.items(), key=lambda x: x[1], reverse=True) # 倒序排序最長(zhǎng)的子串在第一個(gè)
maxLen = dic[0][1]
temp = ""
for k, v in dic:
if v == maxLen:
temp += k
# print(temp + "," + str(maxLen))
print(temp + ',', end='')
print(maxLen)
except:
break
二、筆試真題篇
三、面試篇
到了這里,關(guān)于華為暑期實(shí)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!