问题描述:1-N个数字,每个数字的范围-9999到9999,把这N个数字排序后,删除奇数位的数,然后把剩余的数按原位置排序后继续删除奇数位,直到剩余一个数为止,剩余的数就是幸运数,输出幸运数和它最初的位置。
程序的输入为两个参数:数字的数量(N),具体的数据(以空格隔开)
比如:
5
6 66 666 6666 66666
输出:幸运数字的值,幸运数字的位置
比如:
6666
4
编程思想:
每次都直接删除num_count为偶数的行,即是删除奇数位。
具体代码如下:
from pandas.core.frame import DataFrame
input_count = input('请输入数据的长度')
input_num = input('请输入数据,空格分隔')
input_count = int(input_count)
num_count = range(input_count)
num = input_num.split()
a = {'num':num,'num_count':num_count}
data = DataFrame(a) # 把字典转为dataframe格式
# 删除奇数行(第一行,第三行,。。。)
while data.num.shape[0]>1:
for i in data.index:
if data.num_count[i]%2 == 0 :
data = data.drop(i)
data.num_count = range(data.num.shape[0])
运行后的data为:
即index=3,即幸运数字的位置为3+1=4
幸运数字为:6666
按规定格式输出:
print(data['num'][int(data.index.values)])# 幸运数字
print(int(data.index.values)+1)# 幸运数字的坐标
其中data.index.values 是输出index的值:
把data.index.values 转换为int的形式后方便输出为数字。
写这个文章的意义:这个题本是个线上编程试题,我最后却没能在规定的时间能得到正确的输出,并非前边20行代码有错,或是思路有问题,而是输出的时候不符合考试的要求。我以为把最后的data输出答案便一目了然,但是在线上的程序运行时它只是提示说输出结果不相符,但当时我却是怎么也想不起来如何把pandas的index输出成数字,就是忘记用values,所以功亏一篑,非常惭愧!