描述

在一组空格分隔的自然数中,有些数出现的次数与该数相等,找出符合这个特征的数,并输出其中的最大数。如果不存在这样的数,则输出-1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

输入

在一行中输入若干个自然数,数字之间用空格分隔

输出

输出满足上述条件的数,如果不存在这样的数,则输出-1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬

例如
输入:3 3 3 8 8 8 8 8 8 8 8 1 4 5 6 7
输出:8

1.转换集合去重再变回列表s并排序,减少遍历次数。转列表与排序可以用sorted()函数同步完成,该 函数可对可迭代对象进行排序,返回列表,设置reverse=True 使之降序排序。

  1. numSet = sorted(set(ls),reverse=True) # 列表转集合去重复元素,逆序排序,结果为列表

2.在排序后的列表s中遍历,去原始列表arr中查找出现次数,并将出现次数放入新列表t
3.逆序遍历s列表,判断是否与t列表中出现次数相等,并输出第一个碰到的幸运数,即满足要求。

  1. for x in numSet: # 从大数开始遍历,找到一个就返回,结束函数调用
  2. if x == ls.count(x): # 如果这个数与其出现的次数相等
  3. return x
  1. 如果不存在这样的整数,则输出-1‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬。

    为for循环增加子句,当循环正常结束但未遇到return时执行此子句,表示未找到满足要求的数字,此时直接返回-1。

    1. for x in numSet: # 从大数开始遍历,找到一个就返回,结束函数调用
    2. if x == ls.count(x): # 如果这个数与其出现的次数相等
    3. return x
    4. else: # 与for对齐,是for的子句,当循环正常结束但未遇到return时执行此子句
    5. return -1

    完整参考代码如下: ```python def number(ls): numSet = sorted(set(ls),reverse=True) # 列表转集合去重复元素,逆序排序,结果为列表 for x in numSet: # 从大数开始遍历,找到一个就返回,结束函数调用

    1. if x == ls.count(x): # 如果这个数与其出现的次数相等
    2. return x

    else: # 与for对齐,是for的子句,当循环正常结束但未遇到return时执行此子句

    1. return -1

if name == ‘main‘: num = list(map(int,input().split())) # 输入切分为列表,元素映射为整型 print(number(num)) # 调用函数,输出结果 ```