17校招真題題集(3)11 15

2021-08-28 14:41:24 字數 3556 閱讀 6108

注:本系列題目全是按照通過率降序來排列的,基本保證題目難度遞增。

小易去附近的商店買蘋果,奸詐的商販使用了**交易,只提供6個每袋和8個每袋的包裝(包裝不可拆分)。 可是小易現在只想購買恰好n個蘋果,小易想購買盡量少的袋數方便攜帶。如果不能購買恰好n個蘋果,小易將不會購買。

輸入乙個整數n,表示小易想購買n(1 ≤ n ≤ 100)個蘋果
輸出乙個整數表示最少需要購買的袋數,如果不能買恰好n個蘋果則輸出-1
示例1

20
3
分析:貪心:肯定8個一袋的越多越好,到了最後分情況判斷即可

n=int(input())

q=0while n>24:

n-=8

q+=1

if n==24 or n==18 or n==20 or n==22:

print(q+3)

elif n==12 or n==16 or n==14:

print(q+2)

elif n==6 or n==8:

print(q+1)

else:

print("-1")

另一種思路:動態規劃/揹包。

可以去我動態規劃系列文章找。

給定乙個正整數,編寫程式計算有多少對質數的和等於輸入的這個正整數,並輸出結果。輸入值小於1000。

如,輸入為10, 程式應該輸出結果為2。(共有兩對質數的和為10,分別為(5,5),(3,7))

輸入包括乙個整數n,(3 ≤ n < 1000)
輸出對數
示例1

10
2
分析:這種資料範圍直接暴力即可。先找素數,然後在素數裡找合是n的數對

n=int(input())

l=[2]

for i in range(3,1000)://找素數

q=1for j in range(2,i):

if i%j==0:

q=0break

if q==1:

s,k=0,0

for i in l://找素數對

for j in l:

if i+j==n:

s+=1//所有的

if i==j://相同的

k+=1

print((s+k)//2)

二貨小易有乙個w*h的網格盒子,網格的行編號為0~h-1,網格的列編號為0~w-1。每個格仔至多可以放一塊蛋糕,任意兩塊蛋糕的歐幾里得距離不能等於2。

對於兩個格仔座標(x1,y1),(x2,y2)的歐幾里得距離為:

( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算術平方根

小易想知道最多可以放多少塊蛋糕在網格盒子裡。

每組陣列包含網格長寬w,h,用空格分割.(1 ≤ w、h ≤ 1000)
輸出乙個最多可以放的蛋糕數
示例1

3 2
4
分析:找規律:

所謂歐幾里得距離不能等於二,因為行列都為整數,所以只可能是某一列座標相等而行座標相差2,或者行座標相等而列座標相差2。

就這麼擺唄

l=(input().split())

m=int(l[0])

n=int(l[1])

//橫豎乙個乙個分邊界情況

if m%4==0:

kk=m

gg=m

elif m%4==1:

kk=m+1

gg=m-1

elif m%4==2:

kk=m+2

gg=m-2

elif m%4==3:

kk=m+1

gg=m-1

if n%4==0:

a=(n/4)*(kk+gg)

elif n%4==1:

a=((n-1)/4)*(kk+gg)+kk/2

elif n%4==2:

a=((n-2)/4)*(kk+gg)+kk

elif n%4==3:

a=((n-3)/4)*(kk+gg)+kk+gg/2

print(int(a))

其實不需要找規律,遞推也可以

定義乙個陣列a[1000][1000],初始值都為0,從a[0][0]開始,將a[0][2]和a[2][0]置為-1,遍歷陣列,不是-1的地方可以放蛋糕

#includeusing namespace std;

int a[1000][1000] = ;

int main()

做取出隊頭的值操作的時候,並不彈出當前隊頭。

小明同學發現,這段程式恰好按順序輸出了1,2,3,...,n。現在小明想讓你構造出原始的佇列,你能做到嗎?[注:原題樣例第三行5有錯,應該為3,以下已修正]

第一行乙個整數t(t ≤ 100)表示資料組數,每組資料輸入乙個數n(1 ≤ n ≤ 100000),輸入的所有n之和不超過200000。
對於每組資料,輸出一行,表示原始的佇列。數字之間用乙個空格隔開,不要在行末輸出多餘的空格.
示例1

412

310

1

2 12 1 3

8 1 6 2 10 3 7 4 9 5

分析:逆向考慮:

c++

#include #include using namespace std;

int main()

for(int i = 0; i < q.size(); i++)

cout << q[i] << " ";

cout << endl;}}

python

nn=int(input())

sum=

for i in range(0,nn):

n=int(input())

line = list([j+1 for j in range(n)])

res=

while n:

num=line.pop()

res.insert(0,num)

num = res.pop()

res.insert(0,num)

n-=1

for res in sum:

print(" ".join(list(map(str,res))))

17校招真題題集(1)1 5

注 本系列題目全是按照通過率降序來排列的,基本保證題目難度遞增。遊戲裡面有很多各式各樣的任務,其中有一種任務玩家只能做一次,這類任務一共有1024個,任務id範圍 1,1024 請用32個unsigned int型別來記錄著1024個任務是否已經完成。初始狀態都是未完成。輸入兩個引數,都是任務id,...

2017校招真題 幸運數

時間限制 1秒 空間限制 32768k 題目描述 小明同學學習了不同的進製之後,拿起了一些數字做起了遊戲。小明同學知道,在日常生活中我們最常用的是十進位制數,而在計算機中,二進位制數也很常用。現在對於乙個數字x,小明同學定義出了兩個函式f x 和g x f x 表示把x這個數用十進位制寫出後各個數字...

網易校招真題 數字遊戲

題目描述 小易邀請你玩乙個數字遊戲,小易給你一系列的整數。你們倆使用這些整數玩遊戲。每次小易會任意說乙個數字出來,然後你需要從這一系列數字中選取一部分出來讓它們的和等於小易所說的數字。例如 如果是你有的一系列數,小易說的數字是11.你可以得到方案2 2 7 11.如果頑皮的小易想坑你,他說的數字是6...