2020届商汤技术岗笔试试题

1、题目描述:给定任意两个7进制的非负正数字符串,要求编写代码返回相加结果的7进制字符串。

输入描述:输入为空格分开的两个字符串,按字符串拆分即得到两个参数,如输入为“361 512”,拆分后为“361”和“512”,此输入合法。如果输入为“abc  def”则不合法。

输出描述:输出按7进制相加的结果字符串。如果输入不合法,返回“NA”。

如:输入:361  512

       输出:1203

说明:输入输出均按照字符串处理。

def convertTo10(num:str,base:int=7)->int: #将输入的num转化为10进制
    if num=="0":
        return 0
    result=0
    num_=list(num)
    for i,ele in enumerate(reversed(num_)):
         result+=int(ele)*pow(base,i)
    return result

def convertTo7(num:int,base:int=7)->str: #将输入的10进制转化为7进制
    if num==0:
       return "0"
    result=0
    while (num):
         result+=str(num%base)
         num//=base
    return result[::-1]

if __name__=="__main__":
    try:
       a,b=list(map(str,input().split(" ")))
    except:
       print("NA")
       exit()
    a_,b_=convertTo10(a),convertTo10(b)
    result=convertTo7(a_+b_)
    print(result)

扩展:LeetCode67:二进制求和

         

def addBinary(self, a: str, b: str) -> str:
   return bin(int(a, 2) + int(b, 2))[2:]

#int(x,base): 用于将一个字符串或数字转换为整型
#x:字符串或数字
#base:进制数,默认十进制
#bin():返回一个整数 int 或者长整数 long int 的二进制表示。

2、假如我们有字符串s包含n个字符,s由ABC三个字母组成。同时我们可以将字符串s的字符进行修改变成s',s'要满足长度为k,同时是无限长ABCABCABC...的连续子串。

输入描述:第一行包括输入组数q(1<=q<=2000)

接下来,下面的每两行代表一组输入,其中第一行有两个整数,一个n,一个k,n代表字符串s的长度,k代表字符子串的长度(1<=k<=n<=2000),第二行代表字符串s,由ABC组成。

输出描述:输出q个整数,每个结果为每个字符串s的最小改动次数。

如:3

       5  2

       CBBBB

       5  3

       ACABA

       5  5

       CCCAA

输出:1

           0

           3

 

你可能感兴趣的:(2020届商汤技术岗笔试试题)