華為機考80 108

2021-10-04 23:22:49 字數 4697 閱讀 8961

80、字串匹配

題目要求:

判斷短字串是否在長字串**現

注意:雖然題目說只會輸入兩個字串,但是不加while還是會錯,所以應該吧while設為框架

ps:字串的 in 操作,只有切片完全一致才為true,亂序false

while

true

:try

: x =

input()

y =input()

flag =

true

for s in x:

flag = flag and

(s in y)

print

('true'

if flag else

'false'

)except

:break

81、真分數化為埃及分數

埃及分數:分子為1的分數,就是要求將分數拆為多個分子為1的分式

方法:分數的貪心演算法,準確的演算法表述應該是這樣的:

1、設某個真分數的分子為a,分母為b;

2、把c=(b/a+1)作為分解式中第乙個分數的分母;

3、將a-b%a作為新的a;

4、將b*c作為新的b;

5、如果a等於1,則最後乙個分數為1/b,演算法結束;

6、如果a大於1但是a能整除b,則最後乙個分數為1/(b/a),演算法結束;

否則重複上面的步驟。

while

true

:try

: a =

input()

.split(

'/')

up =

int(a[0]

) down =

int(a[1]

) res =

''# 返回值

while up !=1:

if down%

(up-1)

==0: res = res +

'1/'

+str

(down//

(up-1)

)+'+' up =

1else

: q = down//up

res = res +

'1/'

+str

(q+1)+

'+' up = up - down%up

down = down*

(q+1

)if down%up ==0:

down = down//up

up =

1 res = res +

'1/'

+str

(down)

print

(res)

except

:break

82、列表操作
m,n=

list

(map

(int

,input()

.split())

)# map:函式 迭代器

exchange=

list

(map

(int

,input()

.split())

)

83、大寫字母的個數

『a』.isupper()

『a』 <= s <= 『z』

84、最大回文子串的長度

理論支援:每當增加乙個新的字母,最大回文串的長度只能增加1或者2,不可能增加更多,並且,新的最大回文串必然要包含這個字母!

所以,從頭到尾掃瞄字串,每增加乙個新的字元,判斷以這個字元結尾,且長度為maxlen+1或者maxlen+2的子串是否為回文,如果是,

更新最大回文子串。**如下:

def

longestpalindrome

(s):

if s==s[::

-1]:

return

len(s)

maxlen=

0for i in

range

(len

(s))

:if i-maxlen>=

1and s[i-maxlen-

1:i+1]

==s[i-maxlen-

1:i+1]

[::-

1]: maxlen+=

2continue

if i-maxlen>=

0and s[i-maxlen:i+1]

==s[i-maxlen:i+1]

[::-

1]: maxlen+=

1return maxlen

while

true

:try

: a=

input()

if a:

print

(longestpalindrome(a)

)except

:break

85、最長重複值

輸入乙個byte數字,唬人的,就是input然後int處理一下。輸出最長連續的1的個數

直接用 in

while

true

:try

: n =

int(

input()

) n2 =

bin(n)[2

:]li =

list

(range

(len

(n2)))

li.reverse(

)for i in li:

s ='1'*

(i+1

)if s in n2:

print

(len

(s))

break

except

:break

86、密碼強度等級

知識點:acall匹配(數字、大寫字母、小寫字母、符號)

isupper()、islower()、isalpha()、isdigit()

也可以直接用大於小於等判定

核心部分如下:

alpha_list =

digit_list =

symbol_list =

for i in s:

if i.isalpha():

if i.isdigit():

else:l=

[0,0

]for i in alpha_list:

iford

(i)in

range(97

,123):

l[0]

=1iford

(i)in

range(65

,91):

l[1]

=1

87、撲克牌大小

邏輯問題,典型的華為考題,有時間可以做一下

88、24點遊戲標準答案是用窮舉的辦法,但是我覺得可以用揹包來求解

89、ip合法性檢查

方法1:正則匹配

方法2: 點分之後和0、255比較

while

true

:try

: nums =

list

(map

(int

,input()

.split(

".")))

flag =

0for i in

range

(len

(nums)):

if nums[i]

<

0or nums[i]

>

255:

flag =

1else

:pass

if flag ==0:

print

("yes"

)else

:print

("no"

)except

:break

90、動規棋盤路徑搜尋

91、簡單動規

華為2012機考ifif

昨天去參加了華為的校園招聘上機考試,題目一共三道,都比較簡單,不要求演算法效率,也不要求對所給資料的合法性作檢測,主要還是注重基礎知識的考察,和大家分享一下,希望對接下來的同學有所幫助。1 選秀節目打分,分為專家評委和大眾評委,score 陣列裡面儲存每個評委打的分數,judge type 裡儲存與...

華為上機考試

有乙個陣列a n 順序存放0 n 1,要求每隔兩個數刪掉乙個數,到末尾時迴圈至開頭繼續進行,求最後乙個被刪掉的數的原始下標位置。以8個數 n 7 為例 0,1,2,3,4,5,6,7 0 1 2 刪除 3 4 5 刪除 6 7 0 刪除 如此迴圈直到最後乙個數被刪除。輸入描述 每組資料為一行乙個整數...

華為2023年機考題

輸入兩個字串 都是字母 a到z每個字母有乙個權值 1 26 不區分大小 寫 哪個字母分配哪個權值由你決定 字串的權值就是字串中所有字母的權值之和 字串中的相同字母去掉,再分配權值 include includeusing namespace std int maxweight string str1...