头歌python-实验3中国古代数学问题

一:鸡兔同笼

任务描述

本关任务:编写一个解决鸡兔同笼问题的小程序。

相关知识

鸡兔同笼

大约在 1500 年前,《孙子算经》中记载一个有趣的问题:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?

大概的意思是:有若干只鸡兔同在一个笼子里,从上面数,有 35 个头,从下面数,有 94 只脚,问笼中各有多少只鸡和兔?

请编一个程序,用户在同一行内输入两个整数,代表头和脚的数量,编程计算笼中各有多少只鸡和兔(假设鸡和兔都正常,无残疾),如无解则输出`“Data Error!

 
  1. #参考下面的示例代码,从同一行读入两个数
  2. a, b = input().split() # 将输入的以空格分隔的两个数命名为a和b
  3. a, b = map(int,input().split(',')) # 将输入的以逗号分隔的两个值,转换为整数后命名为a和b

编程要求

根据提示,在右侧编辑区补充代码,计算并输出鸡和兔子的个数。

测试说明

平台会对你编写的代码进行测试:

测试输入: 输入为一行,以空格分隔的两个整数 h f,分别代表鸡兔的总头数和总脚数。

预期输出: 使用输入值进行计算,如有解,则输出: 有m只鸡,n只兔 如无解则输出 Data Error!

输入: 35 94 输出: 有23只鸡,12只兔

"""
在同一行内输入用空格分隔的两个整数,代表头和脚的数量,计算并输出笼中各有多少只鸡和兔,
如无解则输出“Data Error!”,函数无返回值。
输入:35 94
输出:有23 只鸡,12 只兔
输入:100 5
输出:Data Error!
"""
head,feet = map(int, input().split()) #读入以空格分隔的两个整数,表示头和脚的数量
##############Begin#####################
if(feet > 0) and (head > 0) and (feet >= 2*head ) and  ((feet - 2*head) %2 ==0):
    rabbit = (feet - head * 2) // 2
    chicken = head - rabbit
    print(f'有{chicken}只鸡,{rabbit}只兔')
else:
    print('Data Error!')

##############End#####################

 

 二:物不知数

任务描述

本关任务:编写一个能计算物品个数数值的小程序。

相关知识

问题描述

“物不知数”出自《孙子算经》。题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”。

意思是说有一些物品,不知道有多少个,如果一次33 个地数,还多出 2 个;一次55 个地数则多出 3 个;一次 77 个地数会多出 2 个。 现假设物品总数不超过 n (n<=1000),请编程计算满足条件的物品个数并输出。

编程要求

根据提示,在右侧编辑区补充代码,计算满足条件的物品个数并输出。

测试说明

平台会对你编写的代码进行测试:

输入格式: 输入为一个正整数 n,题目保证 0 < n <= 1000

输出格式: 输出不超过 n 且满足条件的物品个数 m,如果有多个解,则分行输出,每行一个解;如果无解则输出 No solution!

输入: 10 输出: No solution!

"""一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;
7个7个数也会多出2个。输入一个正整数,从小到大依次输出所有不超过输入数字
且满足条件的物品数量,有多个答案时每行输出一个。
例如输入:200
输出:
23
128
"""
n = int(input())
##############Begin#####################
flag = 0
for i in range(n+1):
    if i% 3 == 2 and i % 5 ==3 and i % 7 == 2:
        flag = 1
        print(i)
if flag == 0:
    print('No solution!')





##############End#####################

三:二鼠打洞 

任务描述

本关任务:编写二鼠打洞的计算小程序。

相关知识

二鼠打洞问题

《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文是这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?

这道题的意思是:有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。

请编程求此题的解,要求使用循环来完成,不允许使用幂运算。

编程要求

根据提示,在右侧编辑区补充代码,计算并输出它们几天可以打通,相逢时小鼠和大鼠各打了多少。

测试说明

平台会对你编写的代码进行测试:

输入格式 输入为 1 个整数 wall,代表墙的厚度,单位为尺。

输出格式 输出为两行 第一行输出 1 个整数,表示相遇时所需的天数。 第二行输出 2 个浮点数,依次为小鼠和大鼠打洞的距离,单位为尺,保留小数点后 1 位数字。 (提示:round(f,1)为浮点数 f 保留一位小数。)

示例 1

输入: 10 输出:
4 1.8 8.2

示例2

输入: 2 输出:
1 1 1

提示 最后一天可能不足一天便打通了

"""有一堵十尺厚的墙,两只老鼠从边向中间打洞。大老鼠第一天打洞一尺,小老鼠也是打洞一尺。
大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。计算并输出它们几天可以相逢,
相逢时各打了多少尺。
输入格式:输入1 个整数,代表墙的厚度,单位为尺
输出格式:
第一行输出1 个整数,表示相遇时所需的天数
第二行输出2 个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1 位数字。
"""
n = int(input())
rat, mouse, day, time = 1, 1, 0, 1 #大老鼠进度,小老鼠进度,相遇时间,第一天时间
distance_of_rat, distance_of_mouse = 0, 0  # 大老鼠和小老鼠的打洞距离
while n > 0:
    if n - mouse - rat < 0: #第一天打洞完成
        time = n / (mouse + rat)    #算出需要时间
    n = n - mouse - rat    #剩余墙厚
    distance_of_mouse = distance_of_mouse + time * mouse
    distance_of_rat = distance_of_rat + time * rat
    rat = rat * 2    #大老鼠每天进度
    mouse = mouse / 2    #小老鼠每天进度
    day = day + 1    #时间过去一天
print(day)
print(round(distance_of_mouse, 1), round(distance_of_rat, 1))

 

 四:宝塔上的琉璃灯

任务描述

本关任务:编写一个宝塔上的琉璃灯的小程序。

相关知识

宝塔上的琉璃灯

问题描述: 有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有 765 盏琉璃灯,计算并输出每层各有多少盏琉璃灯。

编程要求

编写一个宝塔上的琉璃灯的小程序,计算并输出每层各有多少盏琉璃灯。

测试说明

平台会对你编写的代码进行测试:

输入格式 本题没有输入。

输出格式 输出为 8 行 每行都是一个正整数,从上往下数字依次增大,每个数字代表本层宝塔上的琉璃灯数目。

输出: x x xx xx xx xx xxx xxx

 

"""有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,
已知共有765 盏琉璃灯,计算并输出每层各有多少盏琉璃灯。
输出为8行,每行都是一个正整数,从上往下数字依次增大,每个数字代表本层宝塔上的琉璃灯数目。
"""

from itertools import count
for first in count(1,1):
    floors=[first*(2**i) for i in range(8)]
    if sum(floors)==765:
        for index,value in enumerate(floors,start=1):
            print(f'{value}')
        break
    #################End#############################

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值