问题描述
给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。
输入格式
第一行包含一个整数n。
第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。
第三行包含一个整数a,为待查找的数。
输出格式
如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。
样例输入
6
1 9 4 8 3 9
9
样例输出
2
看到这个题我就直接想到了用列表加索引的方式来查找这个数,一气呵成写了个代码,一验证题目上的输入输出刚好还对了。然后提交蓝桥杯题库,结果判别为错。。。
仔细核对了输入输出,发现
输入
1
41
41
输出应该为
1
n = int(input()) #包含n个整数的数列,整数n
i = 0
aList = []
if i < n:
aList = list(map(int,input().split())) #输入给定的数列
i=i+1
m = int(input()) #输入待查找的数
if aList[i] == m:
print(i+1)
else:
print(-1)
但我这个代码,对于这种单数据输入的情况就会数据溢出。仔细分析了下,应该是i=i+1的锅,于是反复调整循环嵌套里面的内容,但始终不对,目前还没有找到解决的办法,但我相信是能救的,希望有大佬一起探讨帮忙修改
上网查了一些别人的代码,发现虽然输出结果能判别为正确,但其中的语句没有用到第一次输入的数据n作为约束。简单整理了一下思路:
方法1:
n=int(input())
aList=input().split()
a=int(input())
num=1
if str(a) in aList:
for i in aList:
if int(i) == a:
print(num)
break
num=num+1
else:
print(-1)
方法2:
n = int(input())
aList = list(map(int,input().split()))
a = int(input())
count = -1
for i in range(len(aList)): #用列表的长度作为限制
if aList[i] == a:
count = i+1
break
print(count)