前言:前段時間發燒了,所以耽誤了很多事情,一直沒有更新,多穿點衣服,感冒不好受。
接下來有時間就會陸續更新一些基礎的算法題,題目都很經典,大家可以先嘗試著做,再看
解析。
第一題:
思路:先來審題,對于這種題目很長的題更應該耐著性子來讀,把大意讀懂,接著一步步模擬,明確優先順序,那一步做什么判斷,做之前可以先寫一下思路,再來上手實操。
這道題看起來抽象,其實確實抽象,一般的人做不出,除非你是二班的人,我改代碼都改了有兩個小時。首先你應該判斷你輸入的字符串是否展開,不展開的話又分兩種,一種是右邊字符是左邊的后繼,,那么刪除減號輸出;第二種,如果右邊比左邊ascII小,那么保留減號直接輸出。如果展開的話,先判斷是正序還是逆序,同時你又要判斷是否;'-'兩邊的字符是否都是數字還是都是字母,是的話才能繼續展開,否則不展開。然后展開的話循環的左邊界就是左字符加一,到右邊界-1,同時右邊界取不到,接著又要更具p2輸出循環輸出字符的次數,在循環內部根據p1的取值輸出大小寫,這里我定義了一個字符串,將字符填進字符串,方便后續的逆序輸出。最后這里面還有很多細節,大家可以思考,比方說數組越界,逆序輸出等等..
第二題:
思路:注意到要輸出的是單詞,我們可以定義三個數組,分別是作為中間變量的,最長和最短字符串,如果中間變量大于最長就更新長度和單詞。接著就是具體,可以用ch=getchar(),如果讀到\n或者eof退出,碰到分隔符來判斷,沒碰到就把這個字符填進去中間變量字符串
第三題:
思路:就是對著葫蘆畫瓢。要判斷新的字符串,你就得先定義兩個新的字符串,然后在給定的邊界中遍歷,將它添加進新的字符串,然后來比較即可
第四題:
思路:這個題看起來簡單,其實也要好好想一想。這里你可以這么想先定義個數組cnt[26]來計數等下出現字符串的時候減去’a'表示字母所在的位置,循環遍歷字符串的時候,出現一次就計數一次,然后重新遍歷數組,再判斷輸出
第五題:
思路:依葫蘆畫瓢。注意判斷一下,最后一個字符是加上第一個字符,然后輸出即可
第六題:
思路:
題意很簡單,就是把數字字符的個數統計一下,然后輸出個數和字符,那么肯定要定義計數器cnt
然后判斷相鄰兩個字符是不是相同,相同cnt++不相同就輸出,值得注意的是,要判斷相鄰兩個,那么就要從1開始遍歷,從0的話就越界了。最后還要再輸出一遍,原因就是如果最后幾個是相同的數字字符,循環里面就不會把他輸出,舉個例子最后幾個數字是222,他的cnt一直加到3,就退出循環了,所以最后再輸出一次。
第七題:
思路:既然要統計鍵盤總次數,就要根據你輸入的字符串的每一個字母來確定,所以你得將輸入按動一次,二次,三次,四次出現的字符存入一個數組,并把字符作為下標因為你遍歷的字符串是字母,把數值當作數組的值,最后就和即可。
第八題:
思路:這個題看起來很抽象,但是題意很好懂,就是先定義二維數組,接著輸出,如果是地雷輸出*不是地雷判斷這個位置的八個方位有多少個地雷加起來,輸出。這里介紹兩種方法,一種就是用方向數組來優化代碼,另外一種就是用常規if判斷
在這里面,d[x]表示橫行移動d[y]表示縱向移動,例如當d[1+dx[0]][1+[dy[0]]就表示d[2][0],就是向左移動一格判斷。如果用八個if來判斷的話就是,把else里面的語句更改為
第九題:
思路:這個題很簡單,因為字符串有空格,所以用getline,然后稍微判斷一下即可
第十題:
思路:這個題沒什么說的,字符串中有空格,所以讀取的時候用getline,然后分別統計即可
第十一題:
思路:
需要找vk,同時,你能更改一個字母,那么你可以這樣,先找到所以出現的vk然后將他更改為其他的字符,計數器++,方便下一次改字符的時候計數,然后你就要找vv或者vk,要考慮全面找到vv的話改后一個v,找到kk 的話改第一個k,找到就break;最后輸出即可。
第十二題:
思路:
這個題的題意其實有點抽象,不太好理解,我整這道題也整了好久。
注意他問的是字符串中有多少個boy和girl包括被覆蓋的,先從這個輸入輸出來看,為什么boy是4,因為,一個眼睛可見的boy,還有一個o,說明什么?說明o左右兩邊的b 和y都被覆蓋了,后面的yy同理。想到這里,你肯定還是懵。你就要統計次數了,那么統計什么呢,比方說出現一個b那么你計數器是不是要++,出現o計數器++,出現y,計數器也++,但是里面必然會有重復的,比方說你先是統計b,出現b就計數器++的話,包括boy,bo,出現o包括bo,oy,是不是發現bo重復統計了,y也是同理,所以為了避免重復,你只需在當出現o的時候加一個條件,就是不能出現b,同理出現y的時候不能出現b和o,再來計數,這樣就避免了重復。
第十三題:
思路:
題目看似抽象,實則確實抽象。要理解題意。具體來做的話好像的就是打表格。
把所有的英文數字單詞計入一個數組,所對應數字的平方%11的值,再放到一個數組,如何循環六次,每一次輸入一個單詞,判斷是不是數字單詞,是的話就把對應數字平方%11的值賦給一個新的數組,存起來。最后排序一下輸出。并且如果排完之后的數字不是第一位的話,如果數值比10小前面的0,不能省略,所以,這里還要用if判斷一下,再來輸出。
總共13題,到此結束,感謝你的閱讀,與君共勉!