pat 甲级 1002 python

不用考虑输入系数为0的情况,题目给出k为多项式非零项的个数

注意一、如果加起来系数为0,则该项不输出,k也要减去系数为零的项

注意二、如果k为0,即整个多项式为0(result为空),则只输出0,后面没有空格,要不然测试点6会出现格式错误

注意三、一定要将系数变为1位小数输出,指数变为整型输出,要不让测试点2会出错

通过。用字典存储多项式,key为指数,value为系数。如果不在字典的key中,就创建新的键值对。如果在key中,就将系数加到该key的value中。有可能指数高的key排在字典后面,因此需要使用sorted()函数进行排序

n = list(map(float, input().split()))
m = list(map(float, input().split()))
result = {}
k1 = int(n[0])
k2 = int(m[0])

for i in range(1, 2 * k1, 2):
    result[n[i]] = n[i + 1]

for j in range(1, 2 * k2, 2):
    if m[j] in result:
        result[m[j]] += m[j + 1]
        if result[m[j]] == 0:        % 删除value(系数)为0的键值对
            result.pop(m[j])
    else:
        result[m[j]] = m[j + 1]

if len(result) == 0:
    print(len(result), end="")
else:
    print(len(result), end=" ")
result = sorted(result.items(), reverse=True)
for k in result:
    if k != result[-1]:
        print("%d %.1f" % (k[0], k[1]), end=" ")
    else:
        print("%d %.1f" % (k[0], k[1]))

测试点1答案错误。指数需要按整型格式输出

n = input().split()
m = input().split()
result = {}
k1 = int(n[0])
k2 = int(m[0])
for i in range(1,2*k1,2):
    result[n[i]] = float(n[i+1])
for j in range(1,2*k2,2):
    if m[j] in result:
        result[m[j]] += float(m[j+1])
        if result[m[j]] == 0:
            result.pop(m[j])
    else:
        result[m[j]] = float(m[j + 1])
print(len(result),end="")
result = sorted(result.items(),reverse=True)
for k in result:
    print(" %s %.1f"%(k[0],k[1]),end="")

测试点1答案错误,6格式错误。注意当k为0时,只输出0(后面没有空格),输出格式不符题意。思路太复杂

n = input().split()
m = input().split()
result = []
k1 = int(n[0])
k2 = int(m[0])
i = 1
j = 1
while i < 2*k1 or j < 2*k2:
    if i > 2*k1:
        result.extend([m[j],float(m[j + 1])])
        j += 2
        continue
    if j > 2*k2:
        result.extend([n[i],float(n[i + 1])])
        i += 2
        continue
    if n[i] > m[j]:
        result.extend([n[i], float(n[i + 1])])
        i += 2
    elif n[i] < m[j]:
        result.extend([m[j], float(m[j + 1])])
        j += 2
    else:
        s = float(n[i + 1]) + float(m[j + 1])
        if s != 0:                              % 加和系数非零才输出
            result.extend([n[i],s])
        i += 2
        j += 2
print(len(result)//2,end=" ")
print(*result,sep=" ")

测试点1答案错误,6格式错误。

n = input().split()
m = input().split()
result = [0 for k in range(1002)]
s = []
k1 = int(n[0])
k2 = int(m[0])
for i in range(1,2*k1,2):
    result[int(n[i])] += float(n[i+1])
for j in range(1,2*k2,2):
    result[int(m[j])] += float(m[j + 1])
for k in range(1001,-1,-1):
    if result[k] != 0:
        s.extend([k,result[k]])
print(len(s)//2,end=" ")
print(*s,sep=" ")

多个错误

n = input().split()
m = input().split()
result = []
k1 = int(n[0])
k2 = int(m[0])
i = 1
j = 1
while i < 2*k1 or j < 2*k2:
    if i > 2*k1:
        result.extend([m[j],float(m[j + 1])])
        j += 2
        continue
    if j > 2*k2:
        result.extend([n[i],float(n[i + 1])])
        i += 2
        continue
    if n[i] > m[j]:
        result.extend([n[i], float(n[i + 1])])
        i += 2
    elif n[i] < m[j]:
        result.extend([m[j], float(m[j + 1])])
        j += 2
    else:
        result.extend([n[i],float(n[i + 1]) + float(m[j + 1])])
        i += 2
        j += 2
print(len(result)//2,end=" ")
print(*result,sep=" ")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值