首页 > 试题广场 >

合并表记录

[编程题]合并表记录
  • 热度指数:801636 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}数据表中,一条记录包含表索引和数值两个值。请对表索引相同的记录进行合并(即将相同索引的数值进行求和运算),随后按照索引值的大小从小到大依次输出。

输入描述:
\hspace{15pt}第一行输入一个整数 n\left(1 \leqq n \leqq 500\right) 代表数据表的记录数。
\hspace{15pt}此后 n 行,第 i 行输入两个整数 x_i, y_i\left(0 \leqq x_i \leqq 11\,111\,111;\ 1 \leqq y_i \leqq 10^5\right) 代表数据表的第 i 条记录的索引和数值。


输出描述:
\hspace{15pt}一共若干行(视输入数据变化),第 i 行输出两个整数,代表合并后数据表中第 i 条记录的索引和数值。
示例1

输入

4
0 1
0 2
1 2
3 4

输出

0 3
1 2
3 4

说明

\hspace{15pt}在这个样例中,第 1,2 条记录索引相同,合并数值为 1 + 2 = 3
示例2

输入

2
0 1
0 1

输出

0 2

# 解题思路:

# 1、定义2个参数,分别保存键值对个数和键值对;

# 2、使用for循环输入键值对,如果键存在就把值与键值相加,不存在则添加进键值对里;

# 3、使用sorted升序,然后使用for循环键,把键和值打印出来

#输入输出类

class enter_values:

    #参数

    def __init__(self):

        self.__num=0  #输入键值对的个数

        self.__key_values={} #输入的键值对

    #输入键值对的个数

    def numbers(self):

        self.__num = int(input())

    #处理过程

    def keyvalues(self):

        for i in range(self.__num):

            inp = input()

            index = int(inp.split()[0])

            value = int(inp.split()[1])

            if index in self.__key_values.keys():

                self.__key_values[index] = self.__key_values[index] + value

            else:

                self.__key_values.update({index:value})

    #打印出结果

    def  in_print(self):

        for i in sorted(self.__key_values.keys()):

            print(str(i)+ " "+ str(self.__key_values[i]))

enter  = enter_values()

enter.numbers()

enter.keyvalues()

enter.in_print()

编辑于 2021-06-11 19:51:36 回复(0)
#输入键值对个数
n = int(input())
l1 = []
l2 = []
#键值分别出存在l1和l2中
for i in range(n):
    a,b=input().split()
    a = int(a)
    b = int(b)
#如果键重复,则对应的值做加法运算
    if a in l1:
        d = l1.index(a)
        l2[d] += b
    else:
        l1.append(a)
        l2.append(b)
#将新的键值对合并到新的列表l中,排序后输出
l = list(zip(l1,l2))
l.sort()
for each in l:
    print(each[0],each[1])

发表于 2021-06-06 13:20:27 回复(0)
# 读取行数num
num = int(input())
# 通过字典存储索引和数值
dct = {}
# 读取接下来的num行
for i in range(num):
    # 索引和数值
    idx, val = [int(j) for j in input().split()]
    # 如果元素未出现,默认值为0,否则累加
    dct[idx] = dct.get(idx, 0) + val

# 按key升序排列
for key in sorted(dct.keys()):
    print(key, dct[key])

发表于 2021-05-05 22:36:19 回复(1)
N = [0] * int(input())
while 1:
    try:
        index, value = input().split()
        N[int(index)] += int(value)
    except:
        break
for i, v in enumerate(N):
    if v:
        print(f'{i} {v}')

发表于 2021-04-22 12:00:33 回复(1)
while True:
    try:
        num = int(input())
        dic = {}
        for i in range(num):
            ab = input().split()
            a, b = int(ab[0]), int(ab[-1])
            if a not in dic:  # if a not in dic,判断的是a在字典的key中是否存在
                dic[a] = b
            else:
                dic[a] = dic[a] + b
        for i in sorted(dic.keys()):
            print(i,dic[i])
    except:
        break
发表于 2021-04-20 21:45:22 回复(0)
PYTHON3
while True:
    try:
        n = int(input())
        dic = {}
        for i in range(n):
            content = input().split(' ')
            if content[0] in dic:
                dic[content[0]] = str(int(dic[content[0]]) + int(content[-1]))
            else:
                dic[content[0]] = content[-1]
        dic = dict(sorted(dic.items(),key=lambda x:int(x[0])))
        for key in dic:
            print(key,dic[key])
    except:
        break


发表于 2021-04-02 23:16:36 回复(0)
while True:
    try:
        voc = {}
        total = int(input())
        new = []
        for index in range(total):
            key, values = map(int, input().split())
            if key in voc:
                voc[key] += values
            else:
                new.append(key)
                voc[key] = values
        new.sort()
        for i in new:
            print(i, voc[i])
    except:
        break
发表于 2021-03-29 17:05:40 回复(0)
def merge_records(records):
    b = records.split(' ')
    b[0] = int(b[0])
    if b[0] in map:
        map[b[0]] += int(b[1])
    else:
        map[b[0]] = int(b[1])

map = {}
while True:
    try:
        a = int(input())
        for i in range(a):
            merge_records(input())
        sorted_map = sorted(map.items(), key=lambda x:x[0])
        for i in range(len(sorted_map)):
            print(str(sorted_map[i][0]) + ' ' + str(sorted_map[i][1]))
        map = {}
    except EOFError:
        break

编辑于 2021-03-24 13:41:15 回复(0)
num = int(input())
dic = {}
for i in range(num):
    one = list(map(int,input().split(' ')))
    if dic.get(one[0],0)==0:
        dic[one[0]] = one[1]
    else:
        dic[one[0]]+=one[1]
test_data_1=sorted(dic.items(),key=lambda x:x[0])
for i in test_data_1:
    print(str(i[0])+' '+str(i[1]))
发表于 2021-03-17 19:00:57 回复(0)
n = int(input())
d = {}
for i in range(n):
    k, v = map(int, input().split(" "))
    d[k] = d.get(k, 0) + v
for k in sorted(d.keys()):
    print("{} {}".format(k, d[k]))
    

发表于 2021-03-02 22:59:09 回复(2)
python3.9 版本
t=int(input())
mapall={}
for i in range(t):
    map0=list(map(int,input().split(" ")))
    key=map0[0]
    value=map0[1]
    if key in mapall:
        mapall[key]=mapall[key]+value
    else:
        mapall[key]=value
keys=sorted(mapall.keys())  
for key in keys:
    print(key,mapall[key])


编辑于 2021-02-08 14:15:12 回复(0)
n = int(input())#键值对的个数
dict = {}
#循环输入键值对,并依次传入字典
for i in range(n):
    num = input().split()
    key = int(num[0])
    value = int(num[1])
    dict[key] = dict.get(key,0)+value#传入字典时,相同键对应的值相加
#输出字典中键和值
for k,v in sorted(dict.items()):#排序,默认按键升序
    print(k, v)
补充,如果按值排序:        
for k,v in sorted(dict.items(),key=lambda item:item[1]):
    print(k, v)


编辑于 2021-02-08 00:37:47 回复(0)
到底哪里错了呀,求各路大神指点

发表于 2021-02-04 01:52:41 回复(1)
Python解答最为简洁,不接受反驳
a = int(input())
mydist={}
for i in range(a):
    b = input().split(" ")
    key,value=b[0],int(b[-1])
    if key in mydist.keys():
        mydist[key] = value+mydist[key]
    else:
        mydist[key] = value
for k in sorted(list(map(int,mydist.keys()))):
    print(k.__str__()+" "+mydist[str(k)].__str__())


发表于 2021-02-03 16:38:02 回复(0)
num=int(input())
items={}
for i in range(num):
    string=input()
    key=int(string.split()[0])
    value=int(string.split()[-1])
    if key not in items:
        items[key]=value
    else:
        items[key]+=value
        
for i in sorted(items.keys()):
    print(i,items[i])

发表于 2021-01-30 10:18:36 回复(0)
while True:
    try:
        d={};l=[]
        for i in range(int(input())):
            s = input().split()
            if s[0] not in d.keys():
                d[s[0]] = int(s[1])
                l.append([s[0],s[1]])
            else:
                #if s[0] in d.keys():
                d[s[0]] = d[s[0]]+int(s[1])
                for x in l:
                    if x[0] == s[0]:
                        x[1] = d[s[0]]
                        break
        for i in sorted(l,key=lambda x:int(x[0])):
            print(i[0],i[1])
    except:
        break

发表于 2021-01-19 00:49:26 回复(0)
dic={}
for i in range(int(input())):
    k,v=list(map(int,input().split()))
    if k not in list(dic.keys()):
        dic[k]=v
    else:
        dic[k]+=v
for i in sorted(dic):
    print(i, dic[i])

编辑于 2021-01-17 05:08:31 回复(0)
while True:
    try:
        d = {}
        for _ in range(int(input())):
            k, v = map(int, input().split())
            d[k] = d.get(k, 0) + v
        keys = sorted(list(d.keys()))
        for k in keys:
            print(k, d[k])
    except:
        break

发表于 2020-12-13 21:18:53 回复(0)

问题信息

难度:
81条回答 108002浏览

热门推荐

通过挑战的用户

查看代码
合并表记录