PTA 第5章-10 两数之和 (30 分)

给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。找不到则显示 "no answer"。输出的下标按从小到大排序。用一重循环加字典实现。

输入格式:

在一行中给出这组数。 在下一行输入目标数

输出格式:

在一行中输出这两个数的下标,用一个空格分开。

输入样例1:

在这里给出一组输入。例如:

2,7,11,15
9

输出样例1:

在这里给出相应的输出。例如:

0 1

 

输入样例2:

在这里给出一组输入。例如:

3,6,9
10

 

输出样例2:

在这里给出相应的输出。例如:

no answer

看到这题,小编的第一个想法是双层循环,我也觉得这是最简单的,最容易想到的,小编最开始也是没有看到题目中的“一层循环加字典实现”,所以我第一次用的嵌套循环,(PTA判断答案比较死板)答案也是正确的 ,代码如下:

#将输入按“,”分割,并且利用“list”函数转化为列表
a=list(map(int,input().split(',')))

#接收目标数,并且强制转化为整型
b=int(input())

#标记
flag=1

#双层循环
for i in range(0,len(a)):
    
    #flag的一个作用为防止二次输出,利用“break”终止循环
    if flag==0:
        break
    
    #题目中说两个数字,所以小编觉得j从i+1开始就可以
    for j in range(i+1,len(a)):
        
        #判断并且输出
        if a[i]+a[j]==b:
            print('%d %d'%(i,j))
            
            #利用flag标记,如果有输出的话,下方的语句就不会输出
            flag=0

#如果循环中没有输出,我们对flag初值赋值为1
if flag:
    print('no answer')

 

 小编后来看到题目的要求就又写了一个用字典实现的代码。

#将输入按“,”分割,并且利用“list”函数转化为列表
a=list(map(int,input().split(',')))

#接收目标数,并且强制转化为整型
b=int(input())

#标记
flag=1

#设置c为字典
c={}

#利用循环将字典c赋值
for i in range(0,len(a)):
    #这样赋值可以把列表a中的值赋值给字典的key,而value中我们可以认为存储下标值
    c[a[i]]=i

#j只遍历字典中的key,不会遍历字典中的value
for j in c:
    
    #同样,in也只会访问字典中的value
    #这就是为什么小编在上一个循环中对字典c那样赋值
    if (b-j)in c:
        print('%d %d'%(c[j],c[b-j]))
        flag=0
        
        #防止二次输出,在输出一次后就利用“break”终止循环
        break

#此处用来将没有目标数的结果输出
if flag:
    print('no answer')

 

 

 

 注:第一个代码的“break”放在大循环那里是有两个循环,如果放在最后则“break”终止的是里面的小循环,外面的大循环还会进行,而放在外面就可以实现输出一次即终止循环,后一个代码没有嵌套循环,所以放在最后“break”发挥作用时就会终止整个循环,从而程序继续向下运行。

 关于字典

# 关于字典
dict_1={'a':1,'b':2,'c':3,'d':4,'e':5}
for i in dict_1:
    print(i)

print('a'in dict_1)
print(1 in dict_1)

a
b
c
d
e
True
False

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力敲代码啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值