笔试题目训练及分析一
前言:求职路漫漫!简历筛选关一过,笔试关就成了我们必须面对的难题。要想顺利通过笔试关,不仅需要在平时的学习中好好积累,夯实基础,临阵磨刀也是十分有必要的。
通过一些在线笔试题的训练及其分析,可以有效地提升自身的编程能力,同时有助于编程思维逻辑的形成。各类算法、数据结构等基础知识都会浓缩到笔试题中,在训练过程中,不仅要懂得如何解题,更重要的是要掌握如何解一类题的思路。愿大家一起在学习中成长!
1.密码验证合格程序
1 题目描述:
密码要求:
1长度不超过8位
2包括大小写字母、数字、其它符号,以上四种至少三种
3不能有相同长度超过2的子串重复
2输入描述:
一组或多组长度超过2的字符串。每组占一行
3 输出描述:
如果符合要求,输出:OK,否则输出:NG
解题思路:
该题属于典型的字符串判别类题目,且思路清晰简单,只需要按照题目要求对传入的字符串进行一一比对,完全满足三个要求的字符串,我们就将函数返回值设为OK,而只要有一类要求不符合,则应当将返回值设为NG。
注:编程语言为Python2.7.3版本
代码:
#coding: utf-8
"""
@:param: s:输入一个字符串
@:param: code:输出一个判别值,如果为0,则对应不符合要求“NG”,如果为1,则对应符合要求“OK”
author: xc
time:2018-07-24
"""
defjudgePassWord(s):#定义判别字符串的函数
l =len(s)
a, b, c, d =,,,
code =1#给定初始判别code值为1
ifl #判断是否符合第一个要求,即字符串长度是否大于8
code =
else:
foriins:#判断是否存在三类及以上的字符
if'0''9':
a =1
if'a''z':
b =1
if'A''Z':
c =1
else:
d =1
n = a + b + c + d
ifn
code =
else:
foriinrange(l-3):#判断是否存在重复值
ifs[i: i+3]ins[i+1: ]:
code =
break
returncode
while True:
try:
A = raw_input()
code = judgePassWord(A)
ifcode ==1:
print'OK'
elifcode ==:
print'NG'
except:
break
2.简单密码破解
1 题目描述:
密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈.接下来渊子要在密码之上再加一套密码,虽然简单但也安全。
假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。
他是这么变换的,大家都知道手机上的字母:1--1,abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,
声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。
2 输入描述:
输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾
3 输出描述:
输出渊子真正的密文
解题思路:
本题也属于考察字符串部分的知识,解题思路清晰。对键入的字符串,需要对字符串里的每个字符进行分析,如果属于数字,则不变;如果属于大写字母,则将其转化成小写字母并将其往后移一位;如果属于小写字母,则判断属于哪一类小写字母,然后转化成对应的数字。
代码:
#coding: utf-8
"""
@:param: s:输入一个字符串
@:param: code:输出一个判别值,如果为0,则对应不符合要求“NG”,如果为1,则对应符合要求“OK”
author: xc
time:2018-07-24
"""
password = raw_input()#用键盘传入的方式获取得到明文字符串
encodepw = []#给定一个空列表,用来存储转换后的密码字符串
foriinpassword:
if'0''9':#判断是否为数字
encodepw.append(i)
elif'A''Y':#判断是否为大写字母,为简单处理,将A-Y,与Z分隔开来,将Z单独进行转换
i =chr((ord(i.lower())+1))
encodepw.append(i)
elifi =='Z':
i ='a'
encodepw.append(i)
elifiin'abc':#判断属于哪部分小写字母,并将其转换成对应数字
encodepw.append('2')
elifiin'def':
encodepw.append('3')
elifiin'ghi':
encodepw.append('4')
elifiin'jkl':
encodepw.append('5')
elifiin'mno':
encodepw.append('6')
elifiin'pqrs':
encodepw.append('7')
elifiin'tuv':
encodepw.append('8')
elifiin'wxyz':
encodepw.append('9')
else:
break
print''.join(encodepw)#将列表中的元素连接起来,不留空格
3.汽水瓶
1 题目描述:
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?
2 输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1
3 输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出。
解题思路:
从题目的描述来看,很明显,属于递归类题型。以下给出两种解法。
1递归型解题思路。
首先对问题进行分析和子问题拆解,如下图所示。
2循环解法
将空瓶数整除3,得到结果值和余数,设置两个空列表,分别存储整除结果值和余数值,将结果值加总,然后考虑余数值的加总值,将两部分加总,则得到可以换到的汽水总瓶数。
如下图所示:
代码:
1递归解法
#coding: utf-8
"""
@:param: s:输入一个整数
@:param:输出一个可以换到的总汽水瓶数
author: xc
time:2018-07-24
"""
defbottleExchange(n):#递归求解
ifn ==1:
return1
elifn ==2:
return1
else:
returnbottleExchange(n-2)+1
while True:
try:
n =int(raw_input())#raw_input()方法传入的是字符型数据,要将其转换为整数型
ifn ==:
break#如果为0个空瓶,程序不处理
else:
printbottleExchange(n)
2循环解法
#coding: utf-8
"""
@:param: n:输入一个整数,表示有n个空瓶
@:param: l, l2:输出两个列表,一个用来存放整数结果值,一个用来存放余数值
author: xc
time:2018-07-24
"""
defbottleExchange(n):#循环求解,得到整除结果值和余数值
l = []
l2 = []
a =int(n/3)
l.append(a)
l2.append(n%3)
while(a >=1):#判断整除结果值是否大于1,当小于1时则当结束循环
b = a %3
a =int(a/3)
l.append(a)#存储整除结果值
l2.append(b)#存储余数值
returnl, l2
while True:
try:
l, l2 = bottleExchange(int(raw_input()))
n1 =
n2 =
foriinl:#加总
n1 = n1 + i
foriinl2:#加总
n2 = n2 + i
ifn2 #判断余数加总值结果,根据其结果来判断需要在n1的基础上加几个瓶子,因为除数是3,有兴趣的同学可以自己尝试一下为什么是这几类结果
n = n1
elif2
n = n1 +1
elif4
n = n1 +2
else:
n = n1 +3
printn
except:
break
领取专属 10元无门槛券
私享最新 技术干货