1. 程式人生 > >【筆試題中的演算法題】

【筆試題中的演算法題】

1.【愛奇藝】N個盒子,第i個盒子是邊長為a[i]的立方體,如果一個盒子嚴格小於另一個盒子,並且大盒子裡沒有其他小盒子,小盒子沒放入大盒子中,那麼這個小盒子可以放入大盒子裡。可以根據條件任意放盒子,求最後能看見的最少盒子數量。(應該是求重複值最大的個數)先排序後求值

a = [1,2,2,3]
p = {}
for i in a:
   p[i] = a.count(i)
k = 0
for key in p:
   if p[key] > k:
      k = p[key]
   continue
print(k)

2.【愛奇藝】N種食物,排成一排,可以選擇若干種,但是不能選擇相鄰的食物,也可以不選,不選也是一種方法。

f(n) = f(n-1) + f(n-2)每加入一種食物,在f(n-1)的基礎上新增方法,因為不能取相鄰的,即f(n-2)種方法加入最後新增的一種食物。

N = 1  p = 2   N = 2  p = 3   N = 3  p = 5   N = 4  p = 8   N = 5  p = 12

a = [1,1]

for i in range(a):

    a.append(a[-1] + a[-2])

3.【keep】求正整數n的二進位制數值中連續1的個數//13  1101 連續1為2  【做題首要思路很重要,開始想錯了,很難弄回來。110111】

n = 14
a = []
d = 0
b = 0

for i in range(0,32):
    c = n&1
    a.append(c)
    n = n>>1
for i in range(len(a)):
        if a[i] == 1:
            b = b + 1
        if a[i] == 0:
            if b > d:
                d = b
            b = 0
print(d) 
        

4. 【keep】輸入一組有序資料,和一個值,若這個值在陣列中,返回陣列座標,若不在陣列中,插入資料,並返回插入資料座標。

def a(num,key):
    if num[0] >=key or len(num) == 0:
        return 0
    for i in range(1,len(num)):
        if num[i] >= key and num[i-1] < key:
            return i

5. 【美團】在一組陣列中找到大於X的最小和。如 19 18 12 6 7 X= 20 則輸出值為24。(目前想到的辦法就是暴力破解TT)

  (排列組合,找到最小滿足大於X的值 

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import itertools
listp = [15,56,52,22]
x = 52
com = []#組合後的值
o = []##組合數
k = 1
for i in range(1,len(listp)+1):
	a = list(itertools.combinations(listp,k))##排列組合
	for i in a:
		o.append(list(i))
	k += 1
for i in o:
	com.append(sum(i))
p = sorted(com))
for i in p:
    if x<i:
        print(i)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
listp = [15,56,52,22]
x = 52
a = [0]
for i in range(len(listp)):
    for j in range(len(a)):
        a.append(listp[i]+a[j])
for i in range(len(a)):
    for j in range(i,len(a)):
        if a[i] >a[j]:
            a[i],a[j] =a[j],a[i]
for i in a:
   if x<i:
        print(i)
        break

6. 【美團】判讀序列是否存在迴路,序列按照編號順序顯示各位編號的度1 1 1 4 2 1

a = [1,1,1,4,2,1]
b = 4
for i in range(len(a)):
    if a[i] <2:
        a.pop(i)
    

7.【陌陌】題量比較大,時間比較短,但是程式設計也比較容易。三道程式設計。第三道沒寫出來,太緊張,自己時間也不夠。第一道,交換兩個整數位置,A了60%,可能有迴圈輸入這個坑吧,當時沒想到。第二道,abc字串的排列組合,用了前兩天學習的itertools.permutations方法,a。第三道,給出字串,從裡取出間隔為j的字串,輸出最大乘積

輸入一個字串,數值i大於-50,小於50,m是取數量大小,大於0小於50,j為字串間隔,

3 ##陣列個數
7 4 7 ##陣列
2 50  ##間隔為2 取出最多50個數

8.【貝殼】輸入‘0123+888-0x8555’ 0是八進位制,0x是十六進位制 888是十進位制,符號裡只有+ -

9.【貝殼】a 和b玩遊戲,a有X點hp,每次攻擊丟失A點生命值,攻擊完要冷卻C秒,b有Y點hp,每次攻擊損失B點生命值,攻擊完冷卻D秒,玩家hp小於0時死亡,a存活輸出sss,b存活輸出www,都是輸出die。

10.【貝殼】長度為N的整數序列A1到AN,AN=M,1<=Ai<=M,且Aj能被Ai+1整除(1<=i<=N)