习题解析之:查找特征数
【问题描述】
在一组空格分隔的自然数中,有些数出现的次数与该数相等,找出符合这个特征的数,并输出其中的最大数。如果不存在这样的数,则输出-1。
输入格式
在一行中输入若干个自然数,数字之间用空格分隔
输出格式
输出满足上述条件的数,如果不存在这样的数,则输出-1
示例
输入:
3 3 3 8 8 8 8 8 8 8 8 1 4 5 6 7
输出:
8
【编程思路1】
由输入的无序整数序列创建一个列表 ls,用列表 ls 中的元素创建一个集合 s (s = set(ls)),再用推导式 [x for x in s if ls.count(x) == x] 创建一个列表 lt,lt 列表中的元素就是 ls 列表中出现次数和其数值相等的整数。
若 lt 非空,输出其最大值;若 lt 为空,输出 -1 。
编写的源程序如下:

【编程思路2】
由输入的无序整数序列创建一个列表 ls。创建一个空字典 d ,遍历 ls 中的各元素,将元素的值作为键,该元素出现的次数作为值,加入到字典 d 中。
再创建一个空列表 lt ,遍历字典 d 中的键值对,将键和值相等的键值对的键作为元素插入到列表 lt 中。
若 lt 非空,输出其最大值;若 lt 为空,输出 -1 。
编写的源程序如下:

浙公网安备 33010602011771号