首页 > 试题广场 >

找“异数”

[编程题]找“异数”
  • 热度指数:4048 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
定义:数值序列中包含2~16进制整数,如果序列中有一个数,与序列中其他任何一个数大小都不相等,则这个数叫做“异数”。请找出给定数值序列中所有的“异数”.

输入描述:
输入数值序列i行(0<i),每一行分别是进制和数值,以“#”分割。如:n#m, n是整数,代表n进制(1<n<17),m是n进制下的数值.
输入序列以结束符”END”结束。
m的字符集为0-9和A-F,保证数值在十进制下不超过1e9,行数不超过100001行。


输出描述:
输出j行(0<j<=i),每一行都是输入序列的“异数”。要求:
1.按照输入序列的原序输出;
2.如果没有”异数”,输出字符串”None”
3.结束符“END”不用输出
示例1

输入

10#15
4#32
4#33
8#17
END

输出

4#32
python2的特点:运行时间较快,内存占用较大
python3的特点:运行时间慢,内存占用小。建议考试用python2,AC率可能会提升。
这里给出一个清晰的解答,但是是笨方法,没有特殊库的调用。
本题两个注意事项:
1,进制转换的处理
2,顺序输出符合条件的字符串。
import sys
def num(s):
    s = s.split('#')
    base,n = int(s[0]),s[1][::-1]
    number = 0
    for i in range(len(n)):
        if n[i].isdigit():
            number += (base**(i))*int(n[i])
        else:
            temp = ord(n[i])-ord('A')+10
            number += (base**(i))*temp
    return number
def answer(res):
    dic = {}
    ans = []
    for i in range(len(res)):
        tem = num(res[i])
        ans.append(tem)
        if tem in dic:
            dic[tem].append(i)
        else:
            dic[tem] = [i]
    found = False
    for i in range(len(ans)):
        if len(dic[ans[i]])==1:
            found = True
            print(res[i])
    if not found:
        print('None')
if __name__=='__main__':
    res = []
    for line in sys.stdin.readlines():
        s = line.strip()
        if s=='END':
            break
        res.append(s)
    answer(res)


发表于 2019-08-18 21:59:29 回复(0)
""""
进制转换和数组计数
"""
import sys
from collections import Counter

if __name__ == "__main__":
    # sys.stdin = open("input.txt", "r")
    a, b = [], []  # a记录原字符串,b记录十进制的数值
    while True:
        s = input().strip()
        if s == 'END':
            break
        a.append(s)
    for c in a:
        n, m = c.split('#')
        b.append(int(m, int(n)))
    dic = Counter(b)
    ans = []
    for i in range(len(b)):
        if dic[b[i]] == 1:
            ans.append(a[i])
    if not ans:
        print("None")
    else:
        print('\n'.join(ans))

发表于 2019-07-14 20:42:34 回复(0)