这周重点考察程序结构!题目量较大,分两次分享!
一、题目分享
第一题:中国古代数学问题——物不知数
描述
“物不知数”出自《孙子算经》。题目为:今有物不知其数,三三数之剩二,五五数之剩三,七七数之剩二,问物几何?”。
意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。
现假设物品总数不超过n (n<=1000),请编程计算满足条件的物品个数并输出。
输入格式:输入为一个正整数n,题目保证 0 < n <= 1000 。
输出格式:输出不超过n且满足条件的物品个数m,如果有多个解,则分行输出,如果无解则输出"No solution!"。
第二题:中国古代数学问题——二鼠打洞
描述
《九章算术》的“盈不足篇”里有一个很有意思的老鼠打洞问题。原文是这么说的:今有垣厚十尺,两鼠对穿。大鼠日一尺,小鼠亦一尺。大鼠日自倍,小鼠日自半。问:何日相逢?各穿几何?
这道题的意思是:有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。
请编程求此题的解,要求使用循环来完成,不允许使用幂运算。
输入格式
输入为1个整数wall,代表墙的厚度,单位为尺。
输出格式
输出为两行,第一行输出1个整数,表示相遇时所需的天数。第二行输出2个浮点数,分别为小鼠和大鼠打洞的距离,单位为尺,保留小数点后1位数字。(提示:round(f,1)为浮点数f保留一位小数。)
第三题:中国古代数学问题——李白买酒
描述
诗仙李白,一生好酒。一天,他提着酒壶,从家里出来,酒壶中有酒若干。他边走边唱:无事街上走,提壶去买酒,遇店加一倍,见花喝一斗,五遇店和花,喝光壶中酒,计算并输出壶中原有酒几斗?
要求使用循环来计算,不允许使用幂函数。
输入格式:
本题没有输入。
输出格式:
一个整数n,表示李白的酒壶原来有n斗酒。
输入输出示例
无。
第四题:中国古代数学问题——宝塔上的琉璃灯
描述
有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有765盏琉璃灯,计算并输出每层各有多少盏琉璃灯。
输入格式
本题没有输入。
输出格式
输出为8行,每行都是一个正整数,从上往下数字依次增大,每个数字代表本层宝塔上的琉璃灯数目。
第五题:个人所得税计算器
描述
2018年10月1日以前,个税免征额为3500元/月,调整后,个税免征额为5000元/月,7级超额累进个人所得税税率表如下:
所得税计算公式如下:
应纳税额 = (工资薪金所得 - 五险一金 - 个税免征额) × 适用税率 - 速算扣除数
请编写一个个人所税计算器,用户输入应发工资薪金所得、五险一金金额和个税免征额,输出应缴税款和实发工资,结果保留小数点后两位。当输入应发工资小于0或等于0时,输出“error”。
其中:实发工资 = 应发工资 - 五险一金 - 应缴税款
要求使用下面的输入输出语句并补充代码。
salary = float(input()) # salary 应发工资薪金所得
five_one_insurance_fund = float(input()) # five_one_insurance_fund 五险一金
exemption = float(input(')) # exemption 个税免征额
#=======================================================
# 补充你的代码来计算应缴纳税款
输入格式:
输入为三行,每一行都是一个浮点数,分别代表应发工资、五险一金、个税起征点。
输出格式:
输出为一行,形如:应缴税款490.00元,实发工资11510.00元。
第六题:存款买房(A)
描述
你刚刚大学毕业,在北京找到了一份很好的工作,决定开始存钱买房。由于北京的房价很高,你要攒几年钱才能付得起房子的首付。
现根据以下假定来计算你需要多长时间才能攒够首付款:
1.将你想购买的房子的总价称为total_cost。
2.将首付款占总房价的比例称为portion_down_payment。为简单起见,假设portion_down_payment = 0.30(30%)。
3.将存款金额称为current_savings。你的存款从0元开始。
4.假设你的年薪是annual_salary,按12个月平均发放,单位是元。
5.假设你每个月都要拿出一定百分比的工资来存首付。称为portion_saved,此值为一个表示百分比的整数,例如50表示50%。
写一个程序来计算你需要多少个月才能攒够钱付定金,不足一个月按一个月计算。
要求使用下面的输入输出代码,填充完整并通过测试用例。
total_cost = float(input()) # total_cost为当前房价
annual_salary = float(input()) # 年薪
portion_saved = float(input()) /
100
# 月存款比例,输入30转为0.30(即30%)
# 根据首付款比例计算首付款down_payment,根据月存款比例计算月存款额monthly_deposit
#=======================================================
# 补充你的代码
#=======================================================
print('首付',down_payment)
print('月存款', monthly_deposit)
# 计算多少个月才能存够首付款,结果为整数,不足1月按1个月计算,即向上取整
#=======================================================
# 补充你的代码
#=======================================================
print(f'需要{number_of_months}个月可以存够首付')
输入格式
输入为三行,每行一个浮点数,分别代表房价、年薪、月存工资的百分数。
输出格式
输出为三行,分别为根据输入值计算的首付款、月存款、存够首付的月份数目,输出结果严格保留2位小数,具体输出格式见示例。
第七题:存款买房(B)
描述
你刚刚大学毕业,在北京找到了一份很好的工作,决定开始存钱买房。由于北京的房价很高,你要攒几年钱才能付得起房子的首付。
现根据以下假定来计算你需要多长时间才能攒够首付款:
1.将你想购买的房子的总价称为total_cost。
2.将首付款占总房价的比例称为portion_down_payment。为简单起见,假设portion_down_payment = 0.30(30%)。
3.将存款金额称为current_savings。你的存款从0元开始。
4.假设你的年薪是annual_salary,按12个月平均发放,单位是元。
5.假设你每个月都要拿出一定百分比的工资来存首付。称为portion_saved,此值为一个表示百分比的整数,例如50表示50%。
6.假定你每6个月加一次工资,每半年加薪比例semi_annual_raise是一个表示百分比的整数,例如7表示7%,即第7个月的月初涨一次工资,工资涨幅为7%,以后每过6个月再涨一次工资。
写一个程序来计算你需要多少个月才能攒够钱付定金,不足一个月按一个月计算。
要求使用下面的输入输出代码,填充完整并通过测试用例。
total_cost = float(input()) # total_cost为当前房价
annual_salary = float(input()) # 年薪
portion_saved = float(input()) /
100
# 月存款比例,输入30转为0.30(即30%)
semi_annual_raise = float(input()) /
100
# 输入每半年加薪比例,输入7转化为0.07(即7%)
portion_down_payment =
0.3
# 首付比例,浮点数
# 根据首付款比例计算首付款down_payment
#=======================================================
# 补充你的代码
#=======================================================
print('首付',down_payment)
current_savings =
0
# 存款金额,从0开始
number_of_months =
0
monthly_salary = annual_salary/
12
#月工资
monthly_deposit = monthly_salary * portion_saved # 月存款
# 计算多少个月才能存够首付款,结果为整数,不足1月按1个月计算,即向上取整
#每6个月涨一次工资,每年输出年底的存款总额
#=======================================================
# 补充你的代码
if number_of_months %
12
==
0
:
print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_savings)) #每12个月输出一次存款,保留0位小数,使用千分符
#=======================================================
print(f'需要{number_of_months}个月可以存够首付')
输入格式:
输入为四行,每行一个浮点数,分别表示房价、年薪、月存储工资百分数、半年工资涨幅百分数。
输出格式:
输出为若干行,第一行为首付款,最后一行为存够首付的月数n,中间行是每年年底已存工资款总数(取整)。具体格式见示例。
第八题:存款买房(C)
描述
你刚刚大学毕业,在北京找到了一份很好的工作,决定开始存钱买房。由于北京的房价很高,你要攒几年钱才能付得起房子的首付。
现根据以下假定来计算你需要多长时间才能攒够首付款:
1.将你想购买的房子的总价称为total_cost。
2.将首付款占总房价的比例称为portion_down_payment。为简单起见,假设portion_down_payment = 0.30(30%)。
3.将存款金额称为current_savings。你的存款从0元开始。
4.假设你的年薪是annual_salary,按12个月平均发放,单位是元。
5.假设你每个月都要拿出一定百分比的工资来存首付。称为portion_saved,此值为一个表示百分比的整数,例如50表示50%。
6.假定你每6个月加一次工资,每半年加薪比例semi_annual_raise是一个表示百分比的整数,例如7表示7%,即第7、13、19、25… 个月月初涨一次工资,工资涨幅为7%。
7.假设你每个月都是月初发工资,同时会收到上一个月的存款利息,存款年利率interest_rate固定为2.25%。
写一个程序来计算你需要多少个月才能攒够钱付定金,不足一个月按一个月计算。
要求使用下面的输入输出代码,填充完整并通过测试用例。
输入格式:
输入为四行,每行一个浮点数,分别表示房价、年薪、月存储工资百分数、半年工资涨幅百分数。
输出格式:
输出为若干行,第一行为首付款,最后一行为存够首付的月数n,中间行是每年年底已存工资款总数。具体格式见示例。
二、源代码
注意:如果一个问题有两个程序,第二个是能在系统上跑正确的,第一个虽然也能出结果,但是总有各种问题,如框架不对,个别情况不对!
def problem_1():
"""
“物不知数”出自《孙子算经》。题目为:
意思是说有一些物品,不知道有多少个,3个3个数的话,还多出2个;5个5个数则多出3个;7个7个数也会多出2个。
现假设物品总数不超过n (n<=1000),请编程计算满足条件的物品个数并输出。
"""
n = eval(input())
flag = 0
for i in range(n + 1):
if (i % 3 == 2 and i % 5 == 3 and i % 7 == 2):
print(i)
flag += 1
else:
flag += 0
if flag == 0:
print('No solution!')
def problem_2():
"""
有一堵十尺厚的墙,两只老鼠从两边向中间打洞。大老鼠第一天打一尺,小老鼠也是一尺。
大老鼠每天的打洞进度是前一天的一倍,小老鼠每天的进度是前一天的一半。问它们几天可以相逢,相逢时各打了多少。
"""
wall = int(input())
v_1, v_2, day, t = 1, 1, 0, 1
s_1, s_2 = 0, 0
while wall > 0:
if wall - (s_1 + s_2) < 0:
t = wall / (v_1 + v_2)
wall -= v_1 + v_2
s_1 += t * v_1
s_2 += t * v_2
v_1 *= 2
v_2 *= 0.5
day = day + 1
print(day)
print(round(s_2, 1), round(s_1, 1))
def problem_3():
"""
诗仙李白,一生好酒。
一天,他提着酒壶,从家里出来,酒壶中有酒若干。
他边走边唱:无事街上走,提壶去买酒,遇店加一倍,见花喝一斗,五遇店和花,喝光壶中酒,计算并输出壶中原有酒几斗?
"""
n = 0
for i in range(5):
n += 1
n /= 2
print(n)
def problem_4():
"""
有一座八层宝塔,每一层都有一些琉璃灯,每一层的灯数都是上一层的二倍,已知共有765盏琉璃灯,计算并输出每层各有多少盏琉璃灯。
"""
sum = 0
for i in range(8):
sum += 2**i
x = int(765 / sum)
for i in range(8):
print(2**i *x)
def problem_5():
# 应纳税额 = (工资薪金所得 - 五险一金 - 个税免征额) × 适用税率 - 速算扣除数
# 实发工资 = 应发工资 - 五险一金 - 应缴税款
salary = float(input()) # 薪资
five_one_insurance_fund = float(input()) # 五险一金
exemption = float(input()) # 个税免征额
money = [3000, 12000, 25000, 35000, 55000, 80000]
rate = [0.03, 0.1, 0.2, 0.25, 0.3, 0.35, 0.45]
minus = [0, 210, 1410, 2660, 4410, 7160, 15160]
if salary <= 0:
print('error')
elif salary <= exemption:
output_1 = 0
output_2 = salary - five_one_insurance_fund - output_1
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))
else:
if salary - five_one_insurance_fund - exemption <= 0:
output_1 = 0
output_2 = salary - five_one_insurance_fund - output_1
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))
elif salary <= 3000:
output_1 = (salary - five_one_insurance_fund - exemption)*0.03 - 0
output_2 = salary - five_one_insurance_fund -output_1
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))
elif salary > 3000 and salary <= 12000:
output_1 = (salary - five_one_insurance_fund - exemption)*0.1 - 210
output_2 = salary - five_one_insurance_fund -output_1
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))
elif salary > 12000 and salary <= 25000:
output_1 = (salary - five_one_insurance_fund - exemption)*0.2 - 1410
output_2 = salary - five_one_insurance_fund -output_1
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))
elif salary > 25000 and salary < 35000:
output_1 = (salary - five_one_insurance_fund - exemption)*0.25 - 2660
output_2 = salary - five_one_insurance_fund - output_1
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))
elif salary > 35000 and salary <= 55000:
output_1 = (salary - five_one_insurance_fund - exemption)*0.3 - 4410
output_2 = salary - five_one_insurance_fund - output_1
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))
elif salary > 55000 and salary <= 80000:
output_1 = (salary - five_one_insurance_fund - exemption)*0.35 - 7160
output_2 = salary - five_one_insurance_fund - output_1
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))
elif salary > 80000:
output_1 = (salary - five_one_insurance_fund - exemption)*0.45 - 15160
output_2 = salary - five_one_insurance_fund - output_1
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(output_1, output_2))
def problem_5_1():
salary = float(input()) # 薪资
five_one_insurance_fund = float(input()) # 五险一金
exemption = float(input()) # 个税免征额
Num = salary-five_one_insurance_fund-exemption
Taxes = 0
if salary <= 0 or five_one_insurance_fund <= 0 or exemption <= 0:
print("error")
else:
if Num > 0 and Num <= 3000:
Taxes = Num * 0.03
elif Num > 3000 and Num <= 12000:
Taxes = Num * 0.10 - 210
elif Num > 12000 and Num <= 25000:
Taxes = Num * 0.20 - 1410
elif Num > 25000 and Num <= 35000:
Taxes = Num * 0.25 - 2660
elif Num > 35000 and Num <= 55000:
Taxes = Num * 0.30 - 4410
elif Num > 55000 and Num <= 80000:
Taxes = Num * 0.35 - 7160
elif Num > 80000:
Taxes = Num * 0.45 - 15160
Salary = salary - five_one_insurance_fund - Taxes
print('应缴税款{:.2f}元,实发工资{:.2f}元。'.format(Taxes, Salary))
def problem_6():
total_cost = float(input())
annual_salary = float(input())
portion_saved = float(input()) / 100
current_savings = 0
portion_down_payment = 0.30
down_payment = portion_down_payment * total_cost
monthly_deposit = (annual_salary / 12) * portion_saved
number = down_payment % monthly_deposit
if number == 0:
number_of_months = int(down_payment / monthly_deposit)
else:
number_of_months = int((down_payment // monthly_deposit) + 1)
print('首付'+' '+ '%.2f' % (down_payment) +' ' + '元')
print('月存款'+' ' + '%.2f' % (monthly_deposit) + ' ' + '元')
print(f'需要{number_of_months}个月可以存够首付')
def problem_7():
total_cost = float(input()) # total_cost为当前房价
annual_salary = float(input()) # 年薪
portion_saved = float(input()) / 100 # 月存款比例,输入30转为0.30(即30%)
semi_annual_raise = float(input()) / 100 # 输入每半年加薪比例,输入7转化为0.07(即7%)
portion_down_payment = 0.3 # 首付比例,浮点数
down_payment = portion_down_payment * total_cost # 首付
print('首付',down_payment)
current_savings = 0 # 存款金额,从0开始
number_of_months = 0
monthly_salary = annual_salary / 12 #月工资
monthly_deposit = monthly_salary * portion_saved
def year_off_money(number_of_months, monthly_salary, semi_annual_raise, monthly_deposit ):
enough = True
current_saving = 0
while enough:
number_of_months = number_of_months + 1
current_saving += monthly_deposit
if current_saving >= down_payment:
print(f'需要{number_of_months}个月可以存够首付')
enough = False
return
if number_of_months % 12 == 0:
print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_saving)) # 每12个月输出一次存款,保留0位小数,使用千分符
if number_of_months % 6 == 0:
monthly_deposit = monthly_deposit * (1 + semi_annual_raise) # 六月之期已到,加薪
year_off_money(number_of_months, monthly_salary, semi_annual_raise, monthly_deposit)
def problem_8():
total_cost = float(input()) # total_cost为当前房价
annual_salary = float(input()) # 年薪
portion_saved = float(input()) / 100 # 月存款比例,输入30转为30%
semi_annual_raise = float(input()) /100 # 输入每半年加薪比例,输入7转化为7%
portion_down_payment = 0.3 # 首付比例,浮点数
down_payment = portion_down_payment * total_cost # 首付款
print('首付',down_payment)
number_of_months = 0
monthly_salary = annual_salary / 12
monthly_deposit = monthly_salary * portion_saved # 每个月存的钱
def year_off_money(number_of_months, monthly_salary, semi_annual_raise, monthly_deposit):
enough = True
current_savings = 0
while enough:
number_of_months += 1
current_savings *= (1 + 0.0225 / 12)
current_savings += monthly_deposit
if current_savings >= down_payment:
print(f'需要{number_of_months}个月可以存够首付')
enough = False
return
if number_of_months % 12 == 0:
print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_savings))
if number_of_months % 6 == 0:
monthly_deposit = monthly_deposit * (1 + semi_annual_raise)
year_off_money(number_of_months, monthly_salary, semi_annual_raise, monthly_deposit)
def problem_8_1():
total_cost = float(input()) # total_cost为当前房价
annual_salary = float(input()) # 年薪
portion_saved = float(input()) / 100 # 月存款比例,输入30转为30%
semi_annual_raise = float(input()) /100 # 输入每半年加薪比例,输入7转化为7%
portion_down_payment = 0.3 # 首付比例,浮点数
down_payment = portion_down_payment * total_cost # 首付款
print('首付',down_payment)
number_of_months = 0
monthly_salary = annual_salary / 12
monthly_deposit = monthly_salary * portion_saved # 每个月存的钱
current_savings = 0
enough = True
while enough:
number_of_months += 1
current_savings *= (1 + 0.0225 / 12)
current_savings += monthly_deposit
if current_savings >= down_payment:
a = number_of_months
enough = False
if number_of_months % 12 == 0:
print("第{}个月月末有{:,.0f}元存款".format(number_of_months, current_savings))
if number_of_months % 6 == 0:
monthly_deposit = monthly_deposit * (1 + semi_annual_raise)
print(f'需要{number_of_months}个月可以存够首付')
if __name__ == '__main__':
problem_8_1()