2019.8華爲軟件類機考題覆盤

第一題。

題目

求滿足如下條件的三角形個數:

1.周長爲x

2.邊長爲整數

3.是直角三角形

數據量:x<1e5,時間1s

解析

如果直接暴力兩條邊,是O(n*n)的複雜度,顯然無法全部通過。/

考慮上述三個條件,抽象得:

a+b+c=x

a*a+b*b=c*c

兩個方程,三個未知數,所以只要確定一個變量就能算出其他兩個。將方程進行處理得:

a=x(x-2b)/(2x-2b)

然後只需要枚舉b,只要a爲整數且a>0,且a<=b (這是爲了去重)就answer++ ,不需要檢查周長和直角三角形,因爲公式已經包含了這兩個條件。

AC代碼

代碼在家裏,回去再貼

第二題

已知一個5*5矩陣:(題目給定寫死)

1   2   3   4   5

11 12 13 14 15

21 22 23 24 25

31 32 33 34 35

41 42 43 44 45

現在從矩陣中取出相鄰的6個數。兩者相鄰的意思是兩者有一條公共邊(題目就是這麼說的)

然後題目輸入若干1*6數組,形如:

1 2 3 4 5 11  

1 2 3 4 5 6

請問,這些數是否是從矩陣中取出的數。

應該輸出:

1

0

解析

好像太暴力的方法也過不了,說一下我的解決方案吧。

1.先給6個數排序,這樣就容易判斷一些條件。比如兩兩不相等。

2.根據一些特殊條件進行判斷,如兩兩不能相等、數值不能低於1不能高於45,個位不能高於5不能低於1,十位不能高於4.等等

3.判斷是否兩兩相鄰,因爲我們第二步已經去掉循環相鄰,也就是有重複值的情況了,所以只需要判斷他們是否能夠連通。考慮並查集(考試時差點把並查集怎麼寫給忘了)。

AC代碼

回去再貼代碼

第三題

題目大意

有兩個數組含義相同的數字但是順序可能不同,每個數組內數字互不重複。現在要在數組一中刪掉一部分數字(在數組二中相應刪去對應的數字),要刪掉儘量少的數字使兩個數組完全相同。問最少刪掉幾個。

沒做出來,主要是忘了公共子串的狀態轉移方程。(事實證明還是要多多複習啊)。最長公共子串(字符可以不連續的那個)

下面提示說用求兩個串的最長公共子串的長度。

寫寫公共子串的方程吧

定義狀態:

設dp[i,j]表示第一個串前i個字符和第二個串的前j個字符最長公共子串的長度。

狀態轉移方程:

若 s1[i] == s2[j]  有:dp[i,j]=dp[i-1,j-1]+1;

若 s1[i] != s2[j]   有:dp[i,j]=max( dp[i-1,j] , dp[i,j-1] )

初始化:

dp[0,i]=0;

dp[j,0]=0;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章