笔试训练题

笔试题目训练及分析一

前言:求职路漫漫!简历筛选关一过,笔试关就成了我们必须面对的难题。要想顺利通过笔试关,不仅需要在平时的学习中好好积累,夯实基础,临阵磨刀也是十分有必要的。

通过一些在线笔试题的训练及其分析,可以有效地提升自身的编程能力,同时有助于编程思维逻辑的形成。各类算法、数据结构等基础知识都会浓缩到笔试题中,在训练过程中,不仅要懂得如何解题,更重要的是要掌握如何解一类题的思路。愿大家一起在学习中成长!

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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180724G1R2PS00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券