题目描述
密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。假设渊子原来一个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哦。
输入描述:
输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾
输出描述:
输出渊子真正的密文
示例1
输入
YUANzhi1987
输出
zvbo9441987
while True:
try:
output=[]
str = raw_input()
for i in str:
if 64 < ord(i) < 90:
output.append(chr(ord(i)+33))
elif ord(i) == 90:
output.append(chr(ord(i)+7))
elif i in ['a','b','c']:
output.append('2')
elif i in ['d','e','f']:
output.append('3')
elif i in ['g','h','i']:
output.append('4')
elif i in ['j','k','l']:
output.append('5')
elif i in ['m','n','o']:
output.append('6')
elif i in ['p','q','r','s']:
output.append('7')
elif i in ['t','u','v']:
output.append('8')
elif i in ['w','x','y','z']:
output.append('9')
else:
output.append(i)
print ''.join(output)
except:
break
题目描述
有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝?输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。
输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。示例1
输入
3
10
81
0
输出
1
5
40
while True:
try:
num = input()
output = 0
yushu = 0
while (num > 2):
output = (num + yushu) / 3 + output
yushu1 = (num + yushu) % 3
num = (num + yushu) / 3
yushu = yushu1
if 1 < num + yushu < 4:
output +=1
elif num + yushu == 4:
output +=2
print output
except:
break
题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。
示例1
输入
abcdd
输出
dd
while True:
try:
str = raw_input()
letterList = list(str)
letterDic = {}
for i in letterList:
if i not in letterDic.keys():
letterDic[i] = 1
else:
letterDic[i] += 1
minCount = min(letterDic.values())
for i in letterDic:
if letterDic[i] == minCount:
letterList.remove(i)#list delete element
print ''.join(letterList)
except:
break
题目描述
计算最少出列多少位同学,使得剩下的同学排成合唱队形
说明:
N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。
合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足存在i(1<=i<=K)使得T1
def lower_bound(nums, target):
low, high = 0, len(nums)-1
pos = len(nums)
while low2
if nums[mid] < target:
low = mid+1
else:
high = mid
pos = high
return pos
def deal(L,res):
b=[9999]*len(L)
b[0]=L[0]
res.append(1)
for i in range(1,len(L)):
pos = lower_bound(b,L[i])
res.append(pos + 1)
b[pos] = L[i]
return res
while True:
try:
n = input()
q = [int(i) for i in raw_input().split()]
dp_1 = []
dp_2 = []
dp_1 = deal(q,dp_1)
q.reverse()
dp_2 = deal(q,dp_2)
dp_2.reverse()
a = max([dp_1[i]+dp_2[i] for i in range(n)])
print n-a+1
except:
break
算法概述
首先计算每个数在最大递增子串中的位置
186 186 150 200 160 130 197 200 quene
1 1 1 2 2 1 3 4 递增计数然后计算每个数在反向最大递减子串中的位置—>计算反向后每个数在最大递增子串中的位置
200 197 130 160 200 150 186 186 反向quene
1 1 1 2 3 2 3 3 递减计数然后将每个数的递增计数和递减计数相加
186 186 150 200 160 130 197 200 quene
1 1 1 2 2 1 3 4 递增计数
3 3 2 3 2 1 1 1 递减计数
4 4 3 5 4 2 4 5 每个数在所在队列的人数+1(自己在递增和递减中被重复计算)如160这个数
在递增队列中有2个人数
150 160
在递减队列中有2个人数
160 130
那么160所在队列中就有3个人
150 160 130每个数的所在队列人数表达就是这个意思
总人数 - 该数所在队列人数 = 需要出队的人数
题目描述
信息社会,有海量的数据需要分析处理,比如公安局分析身份证号码、 QQ 用户、手机号码、银行帐号等信息及活动记录。
采集输入大数据和分类规则,通过大数据分类处理程序,将大数据分类输出。
输入描述:
一组输入整数序列I和一组规则整数序列R,I和R序列的第一个整数为序列的个数(个数不包含第一个整数);整数范围为0~0xFFFFFFFF,序列个数不限
输出描述:
从R依次中取出Ri,对I进行处理,找到满足条件的 Ij:
Ij整数对应的数字需要连续包含Ri对应的数字。比如Ri为23,Ij为231,那么Ij包含了Ri,条件满足 。
按Ri从小到大的顺序:
(1)先输出Ri;
(2)再输出满足条件的Ij的个数;
(3)然后输出满足条件的Ij在I序列中的位置索引(从0开始);
(4)最后再输出Ij。
附加条件:
(1)Ri需要从小到大排序。相同的Ri只需要输出索引小的以及满足条件的Ij,索引大的需要过滤掉
(2)如果没有满足条件的Ij,对应的Ri不用输出
(3)最后需要在输出序列的第一个整数位置记录后续整数序列的个数(不包含“个数”本身)
序列I:15,123,456,786,453,46,7,5,3,665,453456,745,456,786,453,123(第一个15表明后续有15个整数)
序列R:5,6,3,6,3,0(第一个5表明后续有5个整数)
输出:30, 3,6,0,123,3,453,7,3,9,453456,13,453,14,123,6,7,1,456,2,786,4,46,8,665,9,453456,11,456,12,786
说明:
30—-后续有30个整数
3—-从小到大排序,第一个Ri为0,但没有满足条件的Ij,不输出0,而下一个Ri是3
6— 存在6个包含3的Ij
0— 123所在的原序号为0
123— 123包含3,满足条件
示例1
输入
15 123 456 786 453 46 7 5 3 665 453456 745 456 786 453 123
5 6 3 6 3 0
输出
30 3 6 0 123 3 453 7 3 9 453456 13 453 14 123 6 7 1 456 2 786 4 46 8 665 9 453456 11 456 12 786
while True:
try:
I=[int(i) for i in raw_input().strip().split()][1:]
R=[int(i) for i in raw_input().strip().split()][1:]
R=list(set(R))
R.sort()
l=[]
A_count=0
for item in R:
count=0
tmp=[]
for i,jtem in enumerate(I):
if str(item) not in str(jtem):
continue
else:
count+=1
tmp.append(i)
tmp.append(jtem)
if tmp:
l.append(item)
l.append(count)
l+=tmp
l.insert(0,len(l))
print ' '.join([str(i) for i in l])
except:
break
题目描述
编写一个程序,将输入字符串中的字符按如下规则排序。
规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
如,输入: Type 输出: epTy
规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
如,输入: BabA 输出: aABb
规则 3 :非英文字母的其它字符保持原来的位置。
如,输入: By?e 输出: Be?y
样例:
输入:
A Famous Saying: Much Ado About Nothing(2012/8).
输出:
A aaAAbc dFgghh : iimM nNn oooos Sttuuuy (2012/8).
输入描述:
输出描述:
示例1
输入
A Famous Saying: Much Ado About Nothing (2012/8).
输出
A aaAAbc dFgghh: iimM nNn oooos Sttuuuy (2012/8).
while True:
try:
while True:
string = raw_input()
temp = list(string)
string = filter(lambda x:x.isalpha(),list(string))
string.sort(key = str.upper)
j = 0
for i in range(len(temp)):
if temp[i].isalpha():
temp[i] = string[j]
j = j+1
print ''.join(temp)
except:
break
题目描述
输入描述:
先输入字典中单词的个数n,再输入n个单词作为字典单词。
再输入一个单词,查找其在字典中兄弟单词的个数m
再输入数字k
输出描述:
根据输入,输出查找到的兄弟单词的个数m
然后输出查找到的兄弟单词的第k个单词。
示例1
输入
3 abc bca cab abc 1
输出
2 bca
while True:
try:
s = raw_input()
terms = s.split()
n = int(terms[0])
word_list = list()
i = 1
while i < n + 1:
word_list.append(terms[i])
i = i + 1
query_word = terms[i]
query_index = int(terms[-1])
sort_list = list()
for word in word_list:
if word == query_word:
continue
if len(word) != len(query_word):
continue
l = list(word)
for each in query_word:
if each in l:
l.remove(each)
if len(l) == 0:
sort_list.append(word)
sort_list.sort()
print len(sort_list)
if query_index <= len(sort_list):
print sort_list[query_index - 1]
except:
break
题目描述
题目描述
若两个正整数的和为素数,则这两个正整数称之为“素数伴侣”,如2和5、6和13,它们能应用于通信加密。现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成“素数伴侣”,挑选方案多种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组“素数伴侣”,而将2和5、6和13编组将得到两组“素数伴侣”,能组成“素数伴侣”最多的方案称为“最佳方案”,当然密码学会希望你寻找出“最佳方案”。
输入:
有一个正偶数N(N≤100),表示待挑选的自然数的个数。后面给出具体的数字,范围为[2,30000]。
输出:
输出一个整数K,表示你求得的“最佳方案”组成“素数伴侣”的对数。
输入描述:
输入说明
1 输入一个正偶数n
2 输入n个整数
输出描述:
求得的“最佳方案”组成“素数伴侣”的对数。
示例1
输入
4
2 5 6 13
输出
2
import math
def prime_judge(n):
m = int(math.sqrt(n))
if n%2 == 0:
return False
else:
for i in range(m+1)[3::2]:
if n%i == 0:
return False
return True
def group_lst(lst):
odd = []
even = []
for i in lst:
if int(i)%2==1:
odd.append(int(i))
else:
even.append(int(i))
return (odd,even)
def matrix_ab(a,b):
matrix = [[0 for i in range(len(b))]for i in range(len(a))]
for ii,i in enumerate(a):
for ij,j in enumerate(b):
if prime_judge(i+j) == True:
matrix[ii][ij] = 1
return matrix
def find(x):
for index,i in enumerate(even):
if matrix[x][index] == 1 and used[index] == 0:
used[index] = 1
if connect[index] == -1 or find(connect[index]) != 0:
connect[index]=x
return 1
return 0
while True:
try:
n = input()
m = raw_input().split()
(odd,even) = group_lst(m)
matrix = matrix_ab(odd,even)
connect = [-1 for i in range(len(even))]
count = 0
for i in range(len(odd)):
used = [0 for j in range(len(even))]
if find(i):
count += 1
print count
except:
break
题目描述
1、对输入的字符串进行加解密,并输出。
2加密方法为:
当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;
当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;
其他字符不做变化。
3、解密方法为加密的逆过程。接口描述:
实现接口,每个接口实现1个基本操作:
void Encrypt (char aucPassword[], char aucResult[]):在该函数中实现字符串加密并输出
说明:
1、字符串以\0结尾。
2、字符串最长100个字符。int unEncrypt (char result[], char password[]):在该函数中实现字符串解密并输出
说明:
1、字符串以\0结尾。
2、字符串最长100个字符。输入描述:
输入说明
输入一串要加密的密码
输入一串加过密的密码
输出描述:
输出说明
输出加密后的字符
输出解密后的字符
示例1
输入
abcdefg
BCDEFGH
输出
BCDEFGH
abcdefg
def encoder(s1):
add_password = ''
for each in s1:
if each.isdigit():
n = int(each)
if n != 9:
add_password += str(n + 1)
else:
add_password += '0'
elif each.islower():
if each != 'z':
add_password += chr(ord(each) - 31)
else:
add_password += 'A'
elif each.isupper():
if each != 'Z':
add_password += chr(ord(each) + 33)
else:
add_password += 'a'
else:
add_password += each
return add_password
def decoder(s2):
decode_password = ''
for each in s2:
if each.isdigit():
n = int(each)
if n != 0:
decode_password += str(n - 1)
else:
decode_password += str('9')
elif each.islower():
if each != 'a':
decode_password += chr(ord(each) - 33)
else:
decode_password += 'Z'
elif each.isupper():
if each != 'A':
decode_password += chr(ord(each) + 31)
else:
decode_password += 'z'
else:
decode_password += each
return decode_password
while True:
try:
s1 = raw_input()
s2 = raw_input()
print encoder(s1)
print decoder(s2)
except:
break
题目描述
按照指定规则对输入的字符串进行处理。
详细描述:
将输入的两个字符串合并。
对合并后的字符串进行排序,要求为:下标为奇数的字符和下标为偶数的字符分别从小到大排序。这里的下标意思是字符在字符串中的位置。
对排序后的字符串进行操作,如果字符为‘0’——‘9’或者‘A’——‘F’或者‘a’——‘f’,则对他们所代表的16进制的数进行BIT倒序的操作,并转换为相应的大写字符。如字符为‘4’,为0100b,则翻转后为0010b,也就是2。转换后的字符为‘2’; 如字符为‘7’,为0111b,则翻转后为1110b,也就是e。转换后的字符为大写‘E’。举例:输入str1为”dec”,str2为”fab”,合并为“decfab”,分别对“dca”和“efb”进行排序,排序后为“abcedf”,转换后为“5D37BF”
接口设计及说明:
/*
功能:字符串处理
输入:两个字符串,需要异常处理
输出:合并处理后的字符串,具体要求参考文档
返回:无
*/
void ProcessString(char* str1,char str2,char strOutput)
{
}输入描述:
输入两个字符串
输出描述:
输出转化后的结果
示例1
输入
dec fab
输出
5D37BF
while True:
try:
line = raw_input().split()
line = line[0]+line[1]
lineA , lineB, lineRes, lineTrans= '' , '', '', ''
for i in range(len(line)):
if i%2 == 0:
lineA += line[i]#oushu
else :
lineB += line[i]#jishu
lineA, lineB = sorted(lineA), sorted(lineB)
for i in range(len(lineB)):
lineRes += lineA[i]
lineRes += lineB[i]
if len(lineA) > len(lineB):
lineRes += lineA[i+1]
for i in lineRes:
if i in '0123456789abcdefABCDEF':
temp = bin(int('0x'+i,16))[2:]
temp = (4-len(temp))*'0' + temp
temp = (hex(int(temp[::-1],2))[2:]).upper()
else:
temp = i
lineTrans += temp
print lineTrans
except:
break
未完待续