备战华为,算法题练手(一)

1.为了得到一个数的"相反数",我们将这个数的数字顺序颠倒,然后再加上原先的数得到"相反数"。例如,为了得到1325的"相反数",首先我们将该数的数字顺序颠倒,我们得到5231,之后再加上原先的数,我们得到5231+1325=6556.如果颠倒之后的数字有前缀零,前缀零将会被忽略。例如n = 100, 颠倒之后是1

方法一:
a = str(input())#123
b = a[::-1]#321
print(int(a)+int(b))

方法二:

a = str(input())#123

"""
c = sorted(a,reverse=True)#将元素进行切割,转化为一个列表['3', '2', '1']
d = list(reversed(a))#只能将其元素进行切割,转化为一个列表进行展示['3', '2', '1']
"""
b = sorted(a,reverse=True)
c = ''
for i in b:
    if i != '0':
        c +=''.join(i)
print(int(a)+int(c))

2.给定任意一个字符串,如:输入“aaabbcaac”,输出“a3b2c1a2c1”

s = "abccca"


"""

#方法一
count = 1
b = '' + s[0]
for i in range(len(s)-1):
    if s[i] == s[i+1]:
        count += 1
    else:
        b += str(count)
        b += s[i+1]
        count = 1
b += str(count)
print(b)

"""

#方法二

res = ''
i = 0
while i < len(s):
    res += s[i]
    count = 1
    while i < len(s)-1 and s[i] == s[i+1]:
        count += 1
        i+=1
    res += str(count)
    i += 1
print(res)

3.一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:‘aaa’,‘bb’,‘c’。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少

s = str(input())
count = 1
for i in range(len(s)-1):
    if s[i] != s[i+1]:
        count += 1
print('%.2f'%(len(s)/count))

4.小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]…, A[N]}。
牛博士给小易出了一个难题:
对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数。
小易现在需要判断一个数列是否可以重排之后满足牛博士的要求。
输入描述:
输入的第一行为数列的个数t(1 ≤ t ≤ 10),
接下来每两行描述一个数列A,第一行为数列长度n(1 ≤ n ≤ 10^5)
第二行为n个正整数A[i](1 ≤ A[i] ≤ 10^9)
输出描述:
对于每个数列输出一行表示是否可以满足牛博士要求,如果可以输出Yes,否则输出No。

num = int(input())

for i in range(num):
    length = int(input())
    num_lsit = list(map(int,input().split(' ')))
    count_1 = 0
    count_2 = 0
    count_4 = 0

    for j in num_lsit:
        if j % 2 == 1 :
            count_1 += 1
        elif j % 2 == 0 and j % 4 != 0:
            count_2 += 1
        elif j % 4 == 0:
            count_4 += 1
    if count_2 == 0:
        if count_4 + 1 >= count_1:
            print("Yes")
        else:
            print("No")
    else:
        if count_4 >= count_1:
            print("Yes")
        else:
            print("No")

你可能感兴趣的:(刷题之剑指offer)