前言:前段时间发烧了,所以耽误了很多事情,一直没有更新,多穿点衣服,感冒不好受。
接下来有时间就会陆续更新一些基础的算法题,题目都很经典,大家可以先尝试着做,再看
解析。
第一题:
思路:先来审题,对于这种题目很长的题更应该耐着性子来读,把大意读懂,接着一步步模拟,明确优先顺序,那一步做什么判断,做之前可以先写一下思路,再来上手实操。
这道题看起来抽象,其实确实抽象,一般的人做不出,除非你是二班的人,我改代码都改了有两个小时。首先你应该判断你输入的字符串是否展开,不展开的话又分两种,一种是右边字符是左边的后继,,那么删除减号输出;第二种,如果右边比左边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,然后分别统计即可
第十一题:
思路:
需要找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题,到此结束,感谢你的阅读,与君共勉!