中兴校招笔试题-算法工程师-python

两个编程题,不是很难。

一、字符串分割

一个字符串内只包含T和S,问如何分割,是的每个字串有且仅有2个T,请计算总共有多少种分割方式?

说明:

字符串字母顺序不可改变;

字符串个数为奇数时,直接返回0;

如输入:

TSST

输出:

1

输入:

TTSSSTST

输出:

4

解释:可分割为TT  SSSTST,TTS  SSTST,TTSS  STST,TTSSS  TST四种方式。

思路:找到所有字符串T的下标,每两个T的下标之差的总和,即为总分割方式。

python代码:

str = input()
arr = []
for i in range(len(str)):
    if str[i] == 'T':
        arr.append(i)
leng = len(arr)
sum = 0
if leng%2 == 1 or leng == 0:print(0)
elif leng == 2:print(1)
else:
    for i in range(1,leng-1,2):
        sum += arr[i+1]-arr[i]
    print(sum)

二、刻板的牧民

某个牧场有很多奶牛,每个牛栏关着一头奶牛,牛栏互相紧挨,牛栏之间的距离相同,牛栏最左边有个草料堆,牛栏到草料堆的距离等于牛栏到牛栏的距离。牧民从草料堆取出草料到小推车,从左到右喂牛小推车容量固定,假设小推车可放n捆草,每头奶牛食量不同,所吃草料的捆数不一样。小推车容量n大于每头牛需要吃的草料捆数。牧民喂牛遵循以下规则:

1、每次把小推车装满;

2、每次喂牛都是从左到右把所有牛喂饱;

3、当喂完当前牛栏中的牛时,小推车所剩草料不足以维保下个牛栏中的奶牛,则返回草料堆,装满再继续喂下头牛。

假设从牛栏到草料堆计为1步,牛栏到牛栏也计为1步,牧民从草料堆装满小推车开始喂牛,问喂完所有牛,总共需要走的步数时多少

 

思路:小推车上的草料捆数较多时,直接从左到右走到下一个牛栏,步数+1即可;如果不够,则返回,需要多走2倍牛栏到草料堆之间的步数。

如输入:

3 3 2 3 2 3

10

输出:

12

解释:输入第一行为每头奶牛所需草料捆数,第二行为小推车可放10捆草。输出表示要走12步。

python代码:

arr = list(map(int, input().split()))#每头奶牛所需草料捆数
n = int(input())#小推车的容量
temp = n
sum,i = 0,0
while i < len(arr):
    if temp >= arr[i]:
        temp = temp - arr[i]
        sum += 1
        i += 1
    else:
        temp = n
        temp = temp - arr[i]
        sum += 2*i +1
        i += 1
print(sum)
物联沃分享整理
物联沃-IOTWORD物联网 » 中兴校招笔试题-算法工程师-python

发表评论