目录
题目:
下面是新浪微博上曾经很火的一张图:
一时间网上一片求救声,急问这个怎么破。其实这段代码很简单,index
数组就是arr
数组的下标,index[0]=2
对应 arr[2]=1
,index[1]=0
对应 arr[0]=8
,index[2]=3
对应 arr[3]=0
,以此类推…… 很容易得到电话号码是18013820100
。
本题要求你编写一个程序,为任何一个电话号码生成这段代码 —— 事实上,只要生成最前面两行就可以了,后面内容是不变的。
输入格式:
输入在一行中给出一个由11位数字组成的手机号码。
输出格式:
为输入的号码生成代码的前两行,其中arr
中的数字必须按递减顺序给出。
输入样例:
18013820100
输出样例:
int[] arr = new int[]{8,3,2,1,0};
int[] index = new int[]{3,0,4,3,1,0,2,4,3,4,4};
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
代码:
num=input()
num=[int(item) for item in num]
index=[]
arr=[]
#去除重复项,排序
for i in num:
if i not in arr:
arr.append(i)
arr.sort(reverse=True)
for i in num:
index.append(arr.index(i))
print("int[] arr = new int[]{",end='')
print(*arr,sep=',',end='')
print("};")
print("int[] index = new int[]{",end='')
print(*index,sep=',',end='')
print("};")
代码解读(函数介绍):
输出部分:
根据这道题,我们在输出的时候只想保证数字见有逗号,最后没有,这在很多题中出现,这里说一下参数sep
首先说明一下输出函数:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
参数:
- objects -- 复数,表示可以一次输出多个对象。输出多个对象时,需要用 , 分隔。
- sep -- 用来间隔多个对象,默认值是一个空格。
- end -- 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
- file -- 要写入的文件对象。
- flush -- 输出是否被缓存通常决定于 file,但如果 flush 关键字参数为 True,流会被强制刷新。
这里只介绍前三项:
>>>print(1)
1
>>> print("Hello World")
Hello World
>>> a = 1
>>> b = 'like'
>>> print(a,b)
1 like #sep默认值时空格
>>> print("aaa""bbb")
aaabbb
>>> print("aaa","bbb")
aaa bbb
>>>
>>> print("www","baidu","com",sep=".") # 设置间隔符
www.baidu.com
排序部分:
列表中函数sort()和sorted()
sort()
list.sort(cmp=None, key=None, reverse=False)
参数:
- cmp -- 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
sorted()
sorted(iterable, cmp=None, key=None, reverse=False)
参数:
- iterable -- 可迭代对象。
- cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
两个的区别:
sorted函数生成新的列表,而sort在原列表中改变。