牛客網刷題總結(一)

2021-10-07 13:11:57 字數 1226 閱讀 3959

1.出棧順序

已知某乙個字母序列,把序列中的字母按出現順序壓入乙個棧,在入棧的任意過程中,允許棧中的字母出棧,求所有可能的出棧順序

演算法:1.首先我們對輸入的字母序列進行字元的全排列(通過遞迴)

2.然後在得到每一種排列的時候對其進行檢驗,判斷是否為輸入字母序列的彈出序列。

2.字串解析

以下函式解析字串str是否合法的c語言字串字面值定義(不考慮八進位制和十六進製制字元編碼),如果是,則將解碼後的內容儲存到buf中,並返回0,否則返回-1。比如,"hello 「sangfor」"解碼後結果為hello 「sangfor」。

演算法:輸入的字串中,"佔兩個字元,不是代表轉義字元,因此我們遍歷輸入字串,將轉義字元辨別出來,以乙個字元的形式儲存到輸出字串中即可。

注意:1.雖然在輸入字串中,,』,「都佔乙個字元的位置,要想判斷該字元是否為這三種,必須用if(*str==』\』||*str==』』』||*str==』」』),即前面加斜槓

2.c語言中沒有bool函式,用int的0,1來代替。

3.集合遍歷

有k種顏色的小球(k<=10),每種小球有若干個,總數小於100個。

現在有乙個小盒子,能放n個小球(n<=8),現在要從這些小球裡挑出n個小球,放滿盒子。

想知道有哪些挑選方式。注:每種顏色的小球之間沒有差別。

請按數字遞增順序輸出挑選小球的所有方式。

如有3種顏色,每種顏色小球的個數分別為a:1,b:2,c:3,挑出3個小球的挑法有:

003,012,021,102,111,120

演算法:採用遞迴的方式即可。

注意:迭代層數過多時通常用遞迴來代替。

4.ip段合併

乙個數字段由首尾兩個數字標識,表示乙個自然數集合,

比如數字段[beg, end)表示從beg到end之間的所有自然數,

包含beg,但不包含end。

有若干個數字段,這些數字段之間可能有重疊,

怎麼把這些數字段合併去重,用最少個數的數字段來表示。

合併前後,整個集合包含的數字不發生變化。

演算法:1.先將各個ip段按beg從小到大排序,如果兩個ipbeg一樣,就按end從小到大排序

2.每個ip只需和其上乙個進行比較即可, 如果可以合併就合併,不行就將此ip作為新的段推入結果中。

注意:自定義型別的排序需要自定義排序函式。

牛客網刷題

時間限制 c c 1秒,其他語言2秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 立華奏在學習初中數學的時候遇到了這樣一道大水題 設箱子內有 n 個球,其中給 m 個球打上標記,設一次摸球摸到每乙個球的概率均等,求一次摸球摸到打標記的球的概率 e...

牛客網刷題

時間限制 c c 2秒,其他語言4秒 空間限制 c c 524288k,其他語言1048576k 64bit io format lld 立華奏是乙個剛剛開始學習 oi 的萌新。最近,實力強大的 qingyu 當選了 iods 9102 的出題人。眾所周知,iods 是一場極其毒瘤的比賽。為了在這次...

牛客網刷題筆記

今天在牛客網刷了一道求最長字串是回文數的長度,剛開始的時候,我用兩個指標,乙個指前邊,乙個指後邊,對比兩個指標指向的值,相等則前邊的指標後移,後邊的指標前移,然後再判斷是否相等,如果不相等,那麼就不是回文數,前邊的指標回到第一次開始的地方,後邊的指標回到第一次開始的地方,前邊的指標再自加後移移位,然...