网易 8.11 算法笔试题

第一题:

给n个数组,计算每个数组里面的元素有多少个1,相同1次数为一类,计算每个数组有几类。

#coding=utf-8
# 本题为考试多行输入输出规范示例,无需提交,不计分。
import sys

if __name__ == "__main__":
    # 读取第一行的n
    t = int(sys.stdin.readline().strip())
    ans = 0
    result = []
    for i in range(t):
        # 读取每一行
        n = int(sys.stdin.readline().strip())
        d = {}
        line = sys.stdin.readline().strip()
        values = map(int, line.split())
        for v in values:
            count = 0
            while v:
                c = v % 2
                count += c&1
                v = v >> 1
            if count in d:
                continue
            else:
               d[count] = 1
        result.append(len(d.keys()))
    print (result)

第二题:

游泳池,一个进水管和一个排水管,分别每度过 t1, t2 时间改变开关的状态,分别每分钟排入 m1,m2 的水量。计算 t 时刻泳池的水量。

# coding=utf-8
# 本题为考试多行输入输出规范示例,无需提交,不计分。
import sys

if __name__ == "__main__":
    # 读取第一行的n
    t = int(sys.stdin.readline().strip())
    for _ in range(t):
        line = sys.stdin.readline().strip()
        values = list(map(int, line.split()))
        m, t, m1, t1, m2, t2 = values[0], values[1], values[2], values[3], values[4], values[5]
        tab1, tab2 = 1, 1
        result = 0
        for i in range(1, t+1):
            if tab1 and not tab2:
                if result + m1 < m:
                    result += m1
                else:
                    result = m
            elif tab2 and not tab1:
                if result - m2 >= 0:
                    result -= m2
                else:
                    result = 0
            elif tab2 and tab1:
                result += (m1 - m2)
                if result > m:
                    result = m
                if result < 0:
                    result = 0
            if (i // t1) % 2:
                tab1 = 0
            else:
                tab1 = 1
            if (i // t2) % 2:
                tab2 = 0
            else:
                tab2 = 1
        print(result)

第三题:

给定n个字符串,判断字符串最大连续N的个数(可以容许改变两个字符)

# coding=utf-8
# 本题为考试多行输入输出规范示例,无需提交,不计分。
import sys

if __name__ == "__main__":
    # 读取第一行的n
    t = int(sys.stdin.readline().strip())
    ans = 0
    result = []
    interval = []
    for _ in range(t):
        # 读取每一行
        s = sys.stdin.readline().strip()
        lens = len(s)
        if s[-1] == "N":
            s = s + "G"
        l = []
        ls = len(s)
        k = 0
        for i in range(ls):
            if s[i] != "N":
                if not l:
                    l.append(i)
                    k = i
                else:
                    l.append(i - k - 1)
                    k = i
        if len(l) <= 3:
            re = lens
        else:
            interval = [l[i] + l[i - 1] + l[i - 2] + 2 for i in range(2, len(l))]
            re = max(interval)
        print(re)

你可能感兴趣的:(网易 8.11 算法笔试题)