python题目集pta编程题及答案计算机二级python题目是真题吗
下载地址 https://share.weiyun.com/OvviwGnZ
资料目录 Python练习集100题 100道Python面试题 Python100经典练习题 Python经典题目100道题 Python题库(已收录100道真题) Python100例视频讲解课程 菜鸟教程Python教程100例 130道python练习题,涵盖基础内容的方方面面 Python考试题复习知识点试卷试题 PYTHON测试题和答案 python第一阶段考试题 Python经典面试题和答案解析 python期末考试复习试卷 python习题集大全(附答案解析) 老男孩Python全栈7期练习题(面试真题模拟) 尚观python第一阶段考试(面试真题模拟) 《Python程序设计基础与应用》习题答案 《Python快速编程入门》——课后题答案 Python编程基础张健 , 张良均课后习题及答案 Python程序设计基础及实践(慕课版)郭炜习题答案 Python程序设计基础习题答案与分析 python基础试题(含答案)
举例 森林中的兔子 题目要求 森林中,每个兔子都有颜色。其中一些兔子(可能是全部)告诉你还有多少其他的兔子和自己有相同的颜色。我们将这些回答放在 answers 数组里。 返回森林中兔子的最少数量 示例: 示例: 输入: answers = [1, 1, 2] 输出: 5 输入: answers = [10, 10, 10] 输出: 11 解题思路 这类编程题,考察的不是编码能力,而是思考能力。首先要明确一点,这些兔子不会撒谎,否则,就没有答案了。 当思考问题时感到无从下手,就考虑边界或极值情况,我们假设森林中所有兔子都是相同的颜色,而且都会告诉你有多少其他的兔子和自己有相同的颜色,那么这会是怎样的局面呢? 假设森林中有3只兔子,那么答案一定是[2, 2, 2],如果森林中有5只兔子,那么答案一定是[4, 4, 4, 4, 4]。当你限制了那些变化的条件,问题就变得清晰明了了,有N只兔子,就有N个答案,且答案一定是N-1,兔子是不会说谎的。 现在,来分析题目给的例子,[1, 1, 2],有兔子回答2,就说明有3只兔子是一样的颜色,只有一只兔子回答了,其他两只没有回答,有两只兔子回答了1,他们两个可能是相同的颜色,也可能是不同的颜色,题目要求算最少的数量,那就认为他们是相同的颜色吧,这样就是5只兔子。 如果答案是 [1, 1, 2, 2, 2, 2]呢,森林中最少有8只兔子,2个回答1的兔子是相同颜色,3个回答2的兔子是相同颜色,还有一只兔子回答2,这就说明还有两个兔子和这只兔子颜色相同,但是他们没有回答。 分析到这里,不难得出一个简单的结论,如果一只兔子回答N,那么森林中必然有N+1只兔子颜色相同,剩余的N只兔子可能来回答了,也可能没有来回答,假设都来回答,那就有N+1个答案为N,可是如果出现了N+2个兔子回答N,就说明又多出来N+1只兔子,多出来的这组兔子只有一只来回答了。 你需要做的是统计每个答案的个数,比如 [1, 1, 2, 2, 2, 2],回答情况如下 { 1: 2, # 回答1 的有2只兔子 2: 4 # 回答2 的有4只兔子 } 回答2,表明有3只兔子,但却有4只兔子回答2,用4除以3得1.33,这说明存在两组兔子,每组有3只颜色一样的兔子。 示例代码 # coding=utf-8 import math
def get_rabbit_count(answers): answer_dict = {} for item in answers: answer_dict.setdefault(item, 0) answer_dict[item] += 1
count = 0 for key, value in answer_dict.items(): # math.ceil向上取整, math.ceil(float(value)/(key+1)) 得到的是至少有几组兔子 # 有兔子回答key,那么就至少有key+1个兔子 count += math.ceil(float(value)/(key+1))*(key+1)
return int(count)
if __name__ == '__main__': print(get_rabbit_count([1, 1, 2])) print(get_rabbit_count([10, 10, 10])) print(get_rabbit_count([1, 1, 2, 2, 2, 2]))
|