BUPT#网安院机试总结

A题 最大不相同位数

输入

先输入需要判断的组数T,然后依次两个字符串,共T组,字符串长度在20位以内

输出

每组字符串内不相同的字符的最大位数是多少

例如:

输入

3

baccc

abe

a

a

a

b


输出

5

0

1


个人分析

这个题当时理解性错误(这个题的描述都是我把题目中不必要的内容删去直接写的我最后理解的题目,所以看起来大概会清晰一点?),写了一阵的最大相同位数的判断(明显样例就不是),甚至第一眼以为要用DP就直接放弃先做后面的题目了(扶额)……一开始题目表示字符串长度在2k以内,后来大概是卡在第一题的人太多了,大家都被复杂度卡住了然后就换了数据量了吧。

这题当时我没做出来,后来出来后听同学说似乎很简单。因为求的是不同的,首先可以判断两个字符的长度,如果不等长就直接输出较长的那个长度,如果长度一样,就看两个字符串是否完全相同,不是的话就输出长度

(这么简单???)

大概这道题就是在玩文字游戏 = =,题目出的让人很无奈,看懂的当然so easy,没看懂的只能死磕浪费时间。



B题  数独

输入

按照惯例,先输入组数T

然后输入T组的数据。为9*9的数组,要求满足:

1.每一行的数字不重复

2.每一列的数字不重复

3.每一宫的数字不重复

(每一宫即为将9*9数组划分为九个3*3块后,每块数据中九个数字不重复)

输出:

对每组数据,满足则输出Yes,否则输出No


个人分析

BUPT的机试题难度向来不算高的,用暴力遍历即可。

即分别对每一行、列、宫的数字进行遍历,辅以一个大小为10的哈希标记数组即可。每一次遍历时都将hash置零,当一个数字第一次出现时,对应hash自加1,当前hash值大于1则直接跳出此次遍历并输出No(这里我用了一个flag,即每次遍历前都会判断flag的值以减少遍历次数,当然如果是数独的话毫无疑问要多判断几次flag,但并不影响复杂度。)


C题 单词纠正

输入

一个句子,首字母需要大写,中间单词的字母都需要用小写。但i和bupt不管在哪里都需要大写。

输出

输出纠正后的句子

样例输入

i loVe bupt

hEllO wORlD

样例输出

I love BUPT

Hello world


个人分析

因为之前在九度上刷过题(大概准备考研机试的很多小伙伴都在九度上做过不少题),可以先试试这个九度OJ 题1111 单词替换

总之C题的套路就是先把所有单词转换成小写(可以直接用string的函数),然后再把bupt和i都转换为大写,最后再看首字母是否为小写,是的话再转为大写即可。

这题唯一的难度大概就在需要注意判断一个字符串是否为单词,需要判断:1.若当前字符串在句中,则判断前后是否为空格;2.若当前字符串在句首,则判断之后是否为空格;3.若当前字符串在句尾,则判断之前是否为空格。

我用的string的函数直接循环查找bupt和i,匹配后用下标来判断前后,两个while循环分别嵌套三个简单的if语句就可以了。


D题 

这道题我没有来得及看_(:зゝ∠)_……毕竟还比较弱鸡,听AK的同学说就是很简单的用Floyd就可以搞定了。所以这里附上九度的Floyd算法练习。九度OJ 题1447 最短路径


猜你喜欢

转载自blog.csdn.net/PPPPluie/article/details/68058889