《劍指Offer》題六十一 題六十八

2022-07-14 22:21:25 字數 2066 閱讀 6984

六十

一、撲克牌中的順子

題目:從撲克牌中隨機抽5張牌,判斷是不是乙個順子,即這5張牌是不是連續的。2~10為數字本身,a為1,j為11,q為12,k為13,而大、小王可以看成任意數字。

六十二、圓圈中最後剩下的數字

題目:0, 1, …, n-1這n個數字排成乙個圓圈,從數字0開始,每次從這個圓圈裡刪除第m個數字。求出這個圓圈裡剩下的最後乙個數字。

六十三、**的最大利潤

題目:假設把某**的**按照時間先後順序儲存在陣列中,請問買賣該**一次可能獲得的最大利潤是多少?例如,乙隻**在某些時間節點的**為。如果我們能在**為5的時候**並在**為16時賣出,則能收穫最大的利潤11。

六十四、求1+2+…+n

題目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等關鍵字及條件判斷語句(a?b:c)。

分析:迴圈只是讓相同的**重複執行n遍而已,我們可以不用for和while來達到這個效果。比如我們先定義乙個型別,接著建立n個該型別的例項,那麼這個型別的建構函式將會被呼叫n次。

利用建構函式求解:

class temp 

static void reset()

static unsigned int getsum()

private:

static unsigned int n;

static unsigned int sum;

};unsigned int sum_one_to_n(unsigned int n)

六十五、不用加減乘除做加法

題目:寫乙個函式,求兩個整數之和,要求在函式體內不得使用「+」、「-」、「×」、「÷」四則運算符號。

分析:二進位制加法和十進位制加法的過程一樣,都是①各位相加不進製,②記下進製,③把前兩步的結果相加。對於二進位制加法來說,第一步的結果和異或的結果是一樣的,第二步的結果等價於兩個數先做位與運算,然後再向左移動一位,第三步把前兩個步驟的結果相加,過程依然是重複前面兩步。

位運算解法:

int add_with_bit(int num1, int num2)

while(num2 != 0);

return sum;

}

六十六、構建乘積陣列

題目:給定乙個陣列a[0, 1, …, n-1],請構建乙個陣列b[0, 1, …, n-1],其中b中的元素b[i] = a[0]×a[1]×…×a[i-1]×a[i+1]×…×a[n-1]。不能使用除法。

六十七、把字串轉換成整數

題目:寫乙個函式strtoint,實現把字串轉換成整數這個功能。要求不能使用atoi或者其他類似的庫函式。

沒有考慮非法輸入的解法:

int strtoint(char *pstr)

return num;

}

分析:上述解法雖簡潔,但也遺漏了許多檢錯點。比如,①當輸入的字串為空串或輸入的字串是"0"時,該函式都返回0;②'+'和'-'字元是合法的輸入符,而其他字元是非法字元;③當輸入的字串只含"+"和"-"時,雖然它們是合法字元,但該字串卻不合法。

完善後的**:

int strtoint(char *pstr)

if(*pstr == '\0')

int plus = 0;

int minus = 0;

if(*pstr == '+')

if(*pstr == '-')

int num = 0;

while(*pstr != '\0')

num = num * 10 + *pstr - '0';

pstr++;

} if(minus == 1)

if(num == 0)

error = 4;

return num;

}

六十八、樹中兩個節點的最低公共祖先

題目:輸入兩個樹節點,求它們的最低公共祖先。(1)若該樹是二叉搜尋樹;(2)若該樹只是普通的樹,但樹中的節點中有指向父節點的指標;(3)若該樹只是普通的樹,而且樹中的節點沒有指向父節點的指標。

《劍指offer》刷題系列 (六十一)醜數

我們把只包含質因子 2 3 和 5 的數稱作醜數 ugly number 求按從小到大的順序的第 n 個醜數。示例 輸入 n 10 輸出 12 解釋 1,2,3,4,5,6,8,9,10,12 是前 10 個醜數。定義乙個陣列用來儲存n個醜數,然後逐個填滿陣列。初始化 預設1為醜數,所以陣列的第乙個...

leecode第六十一題(旋轉鍊錶)

計算並得到新的頭節點之前的那個節點 node node next if node next null 若這個節點是原尾節點,直接返回原陣列 return head listnode new head node next 若不是,幹三件事,第一得到新的頭結點 node next null 第二把新頭結...

心眼者 pat basic 練習六十一 判斷題

判斷題的評判很簡單,本題就要求你寫個簡單的程式幫助老師判題並統計學生們判斷題的得分。輸入在第一行給出兩個不超過 100 的正整數 n 和 m,分別是學生人數和判斷題數量。第二行給出 m 個不超過 5 的正整數,是每道題的滿分值。第三行給出每道題對應的正確答案,0 代表 非 1 代表 是 隨後 n 行...