程式設計師進階之路之面試題與筆試題集錦(三)線上程式設計題

choubou發表於2021-09-09

來源:網易

1.奇數偶數問題

小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩臺魔法機器可以透過投入x(x可以為0)個魔法幣產生更多的魔法幣。 
魔法機器1:如果投入x個魔法幣,魔法機器會將其變為2x+1個魔法幣 
魔法機器2:如果投入x個魔法幣,魔法機器會將其變為2x+2個魔法幣 
小易採購魔法神器總共需要n個魔法幣,所以小易只能透過兩臺魔法機器產生恰好n個魔法幣,小易需要你幫他設計一個投入方案使他最後恰好擁有n個魔法幣。

輸入描述: 
輸入包括一行,包括一個正整數n(1 ≤ n ≤ 10^9),表示小易需要的魔法幣數量。 
輸出描述: 
輸出一個字串,每個字元表示該次小易選取投入的魔法機器。其中只包含字元’1’和’2’。 
示例1 
輸入 
10 
輸出 
122 
思路: 
魔法機器1只能產生奇數,魔法機器2只能產生偶數。

從n不斷按奇偶倒推回0就可以了

n = int(input())result = ''while n:    if n % 2:#餘數
        n = (n - 1) // 2
        result = '1' + result
    else:
        n = (n - 2) // 2#取整
        result = '2' + resultprint(result)  12345678910

【字串碎片】連續重合字串

一個由小寫字母組成的字串可以看成一些同一字母的最大碎片組成的。例如,”aaabbaaac”是由下面碎片組成的:’aaa’,’bb’,’c’。牛牛現在給定一個字串,請你幫助計算這個字串的所有碎片的平均長度是多少。

輸入描述: 
輸入包括一個字串s,字串s的長度length(1 ≤ length ≤ 50),s只含小寫字母(‘a’-‘z’)

輸出描述: 
輸出一個整數,表示所有碎片的平均長度,四捨五入保留兩位小數。

如樣例所示: s = “aaabbaaac” 
所有碎片的平均長度 = (3 + 2 + 3 + 1) / 4 = 2.25 
示例1 
輸入 
aaabbaaac 
輸出 
2.25

s=raw_input()
n=len(s)
k=0for i in range(n-1):    if s[i]!=s[i+1]:
        k+=1print '%.2f'%(float(n)/(k+1))1234567

3.相反數

為了得到一個數的”相反數”,我們將這個數的數字順序顛倒,然後再加上原先的數得到”相反數”。例如,為了得到1325的”相反數”,首先我們將該數的數字順序顛倒,我們得到5231,之後再加上原先的數,我們得到5231+1325=6556.如果顛倒之後的數字有字首零,字首零將會被忽略。例如n = 100, 顛倒之後是1. 
輸入描述: 
輸入包括一個整數n,(1 ≤ n ≤ 10^5) 
輸出描述: 
輸出一個整數,表示n的相反數 
示例1 
輸入 
1325 
輸出 
6556

n = str(input())print (int(n)+int(''.join(n[::-1])))12

4.最大深度遍歷

[程式設計題]遊歷魔法王國 
魔法王國一共有n個城市,編號為0~n-1號,n個城市之間的道路連線起來恰好構成一棵樹。 
小易現在在0號城市,每次行動小易會從當前所在的城市走到與其相鄰的一個城市,小易最多能行動L次。 
如果小易到達過某個城市就視為小易遊歷過這個城市了,小易現在要制定好的旅遊計劃使他能遊歷最多的城市,請你幫他計算一下他最多能遊歷過多少個城市(注意0號城市已經遊歷了,遊歷過的城市不重複計算)。

輸入描述: 
輸入包括兩行,第一行包括兩個正整數n(2 ≤ n ≤ 50)和L(1 ≤ L ≤ 100),表示城市個數和小易能行動的次數。 
第二行包括n-1個整數parent[i](0 ≤ parent[i] ≤ i), 對於每個合法的i(0 ≤ i ≤ n - 2),在(i+1)號城市和parent[i]間有一條道路連線。

輸出描述: 
輸出一個整數,表示小易最多能遊歷的城市數量。 
示例1 
輸入 
5 2 
0 1 2 3 
輸出 
3

思路:

遊歷城市,分為兩種情況: 
1.如果步行的次數小於樹的最大深度的話,只需要沿著最大深度步行即可 
2.如果步行次數大於樹的最大深度的話,可以朝著最大深度的方向步行,但是中間經過的分岔路口可以選擇遊歷一些城市然後返回, 
分叉來回需要重複兩次路線,因此遊歷的城市數為 = (L-maxdepath)/2; 
當然遊歷的城市數不能超過總數之和 
圖片描述

n,L=map(int,input().split())parent=list(map(int,input().split()))
maxdeep=[1 for i in range(n)]for i in range(1,n):
    maxdeep[i]=maxdeep[parent[i-1]]+1deepth=max(maxdeep)if L
輸入:
45 73
0 0 0 1 0 0 3 5 6 8 7 9 1 10 1 2 15 6 8 11 14 17 8 14 3 21 23 3 21 15 12 5 21 31 11 13 7 17 20 26 28 16 36 26123

結果41


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4548/viewspace-2803291/,如需轉載,請註明出處,否則將追究法律責任。

相關文章