Darkbule37 2021-01-31 22:40 采纳率: 100%
浏览 83
已采纳

Python练习题!!求解题思路和答案!

背景:在一个岛上第0周有a只兔子(a>=50)和c只老虎(c>=5).

情况:a)兔子在n周内没有灭绝:(n表示周数,d表示n周中任意一周。)

        1.如果是奇数周(d>=3比如3,5,7,9....),每三只兔子中会有一只兔子会生出两只小兔子。

         2.如果是偶数周。每只老虎会吃掉两只兔子(一只年级最大的,一只年级最小的)

         3.所有兔子的寿命只有8周(自然死亡)

         例子:a=50, c=5 n=13 则序列为[50,50,40,66,56,92,82,136,101,167,157,245,235,365]

        b)兔子在n周之类会发生灭绝:n周内在d周兔子的数量为0,老虎的也会接着灭绝.

         例子:a=52, c=12  n=8 则序列为[52,52,28,46,22,36,12,20,0] 输出则为兔子在第8周灭绝。

任务:求解n周之后兔子存活的数量

eg.

有几周?: 21
在一开始有多少只兔子?: 82
在一开始有多少只老虎?: 10
2562 只兔子在周: 21

有几周?: 18
在一开始有多少只兔子?: 50
在一开始有多少只老虎?: 12
兔子灭绝在周: 8

希望能定义函数和用到format函数

本人Python初学者希望大佬们能用尽量简单和基础的python方法解答,不然可能看不懂eg.正则表达式。。。

  • 写回答

1条回答 默认 最新

  • PythonJavaC++go 2021-02-02 15:20
    关注
    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    # __author__ = 'QiuZiXian'  http://blog.csdn.net/qqzhuimengren/   1467288927@qq.com
    # @time          :2021/1/31  9:11
    # @abstract    :
    
    '''
    思路:
    
    1. 1个列表存放第0 - n周,兔子的变化情况;(最先进入列表的,后续每增加一周,年龄自然增加一周) 
    
    2
    2.1 兔子出生
    2.2 兔子被吃 (大、 小)
    2.3 兔子自然死亡
    2.4 判断奇偶周
    
    3 
    3.1 外部输入数据
    3.2 主程序
    
    PS: 你案例中的计算数值不对。
    '''
    
    
    
    def isOdd(d):
    	'''
    	判断第 d 周是奇数还是偶数
    	:param d:
    	:type d:
    	:return: 偶数: true; 奇数 false
    	:rtype:
    	'''
    	if d%2 == 0:
    		return True
    	else:
    		return False
    
    
    def eatOld(a, old, c):
    	'''
    	年纪最大的被吃
    	:param a:
    	:type a:
    	:param old:
    	:type old:
    	:param c:
    	:type c:
    	:return:
    	:rtype:
    	'''
    	if  a[old] - c >=0:
    		a[old] = a[old] -c
    		return a
    	else:
    		a[old] = 0
    		return eatOld(a, old + 1, c-a[old])
    
    def eatYoung(a, old, c):
    	'''
    	年纪最小的被吃
    	:param a:
    	:type a:
    	:param old:
    	:type old:
    	:param c:
    	:type c:
    	:return:
    	:rtype:
    	'''
    	if  a[old] - c >=0:
    		a[old] = a[old] -c
    		return a
    	else:
    		a[old] = 0
    		return eatYoung(a, old - 1, c-a[old])
    
    def eated(a, c):
    	'''
    	偶数周,被吃掉的兔子,, 更新a
    	:param a:
    	:type a:
    	:param c:
    	:type c:
    	:return:
    	:rtype:
    	'''
    	total = sum(a)
    	if total > 2*c:
    		a = eatOld(a, 0, c)
    		a = eatYoung(a, -1, c)
    	else:
    		for i in range(len(a)):
    			a[i] = 0
    	return a
    
    def born(a, bornTrue):
    	'''
    	每周新增的兔子
    	小于3 或者大于3的偶数周,新生兔子0 更新a
    	>3 的奇数周,新生的兔子按规则,, 更新a
    	:param a:
    	:type a:
    	:return:
    	:rtype:
    	'''
    	if bornTrue:
    		a.append(0)
    	else:
    		total = sum(a)
    		a.append(int(2 * total / 3))
    	return a
    
    def dead(a, d):
    	'''
    	自然死亡的兔子, 更新a
    	:param a:
    	:type a:
    	:param d:
    	:type d:
    	:return:
    	:rtype:
    	'''
    	if len(a) >= 8:
    		for i in range(d - 7):
    			a[i] = 0
    	return a
    
    def main():
    	n = int(input("有几周?:").strip())
    	a1 = int(input("在一开始有多少只兔子?(a>=50):"))
    	c = int(input("在一开始有多少只老虎?(c>=5):"))
    	a = [a1] # 第d周兔子数
    	total = [a1]
    	for d in range(1, n + 1):
    		if d >= 2:
    			if isOdd(d):
    				a = eated(a, c)
    		if d >=3:
    			a = born(a, isOdd(d))
    		else:
    			a = born(a, True)
    		a = dead(a, d)
    		total.append(sum(a))
    		print(total)
    		if total[-1] == 0:
    			print("兔子灭绝在周{}".format(d))
    			break
    		# print(a)
    	else:
    		print("有{}只兔子在周{}".format(sum(a), n))
    
    if __name__ == '__main__':
    	while True:
       		main()
    
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥20 为什么我写出来的绘图程序是这样的,有没有lao哥改一下
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号