python18年校招真题

1、小易有一些彩色的砖块。每种颜色由一个大写字母表示。各个颜色砖块看起来都完全一样。现在有一个给定的字符串s,s中每个字符代表小易的某个砖块的颜色。小易想把他所有的砖块排成一行。如果最多存在一对不同颜色的相邻砖块,那么这行砖块就很漂亮的。请你帮助小易计算有多少种方式将他所有砖块排成漂亮的一行。(如果两种方式所对应的砖块颜色序列是相同的,那么认为这两种方式是一样的。)
例如: s = “ABAB”,那么小易有六种排列的结果:
“AABB”,“ABAB”,“ABBA”,“BAAB”,“BABA”,“BBAA”
其中只有"AABB"和"BBAA"满足最多只有一对不同颜色的相邻砖块。

import collections
obj = collections.Counter(raw_input())
length = len(obj)
if length > 2 or length == 0:
    print 0
if length == 2:
    print 2
if length == 1:
    print 1

2、如果一个数列S满足对于所有的合法的i,都有S[i + 1] = S[i] + d, 这里的d也可以是负数和零,我们就称数列S为等差数列。
小易现在有一个长度为n的数列x,小易想把x变为一个等差数列。小易允许在数列上做交换任意两个位置的数值的操作,并且交换操作允许交换多次。但是有些数列通过交换还是不能变成等差数列,小易需要判别一个数列是否能通过交换操作变成等差数列

n = input()
x = map(int,raw_input().split())
length = len(x)
x.sort()
i = 1
if length < 2:
    print "Impossible"
d = x[1] - x[0]
while i < length-1:
    if x[i] + d == x[i+1]:
        i += 1
    else:
        print "Impossible"
        break
if i == length-1:
    print "Possible"

3、如果一个01串任意两个相邻位置的字符都是不一样的,我们就叫这个01串为交错01串。例如: “1”,“10101”,"0101010"都是交错01串。
小易现在有一个01串s,小易想找出一个最长的连续子串,并且这个子串是一个交错01串。小易需要你帮帮忙求出最长的这样的子串的长度是多少。

s = raw_input()
count = 1
sum = 1
for i in range(len(s)-1):
    if abs(int(s[i+1]) -int(s[i]) ) == 1:
        sum += 1
        if sum > count :
            count = sum
    else:
        sum = 1
print count

4、小易有一个长度为n的整数序列,a_1,…,a_n。然后考虑在一个空序列b上进行n次以下操作:
1、将a_i放入b序列的末尾
2、逆置b序列
小易需要你计算输出操作n次之后的b序列。

n = input()
a = list(raw_input().split())
if n % 2 == 0:
    b = a[n-1::-2] + a[0::2]
else:
    b = a[n-1::-2] + a[1::2]
print ' '.join(b)

你可能感兴趣的:(python18年校招真题)