一、一维植树问题
甲地到乙地距离a米,每隔b米种一棵树,问需要种多少棵树?
分析:
每段长b米,可以把a米的距离分为a/b段,(1)两端都不种,中间点数比段数小1,树的数量=a/b-1;(2)一端种,另一端不种,树的数量=a/b;(3)两端都种,树的数量=a/b+1。
编写程序:
#一维植树问题
#输入数据
a = int(input("甲乙两地距离(单位:米):"))
b = int(input("植树的间隔(单位:米):"))
c = int(input("端点情况(两端都不种:0,一端种另一端不种:1,两端都种:2):"))
#计算
num = a//b
#打印结果 语法请看附录1
if c==0:
print("共要植树%d棵。" % (num-1))
elif c==1:
print("共要植树%d棵。" % num)
else:
print("共要植树%d棵。" % (num+1))
验证程序:
二、平面植树问题
在长a米宽b米的地上植树,树的横竖间隔都是c米,问共要植多少棵树?注:a和b都可以被c整除,横和竖方向都有三种情况。
分析:
根据一维植树,长方向可分a/c段,端点情况d是-1、0、1中一种;宽方向可分b/c段,端点情况e是-1、0、1中一种。可得长上有a/c+d点,宽上有b/c+e点,就是说一行a/c+d棵,有b/c+e行,因此树的棵数是(a/c+d)*(b/c+e)棵。
编写程序:
#平面植树问题
#输入数据
a = int(input("矩形地块长(单位:米):"))
b = int(input("矩形地块宽(单位:米):"))
c = int(input("植树的间隔(单位:米):"))
type_a = int(input("长方向端点情况(两端都不种:0,一端种另一端不种:1,两端都种:2):"))
type_b = int(input("宽方向端点情况(两端都不种:0,一端种另一端不种:1,两端都种:2):"))
#计算
num_a = a//c
num_b = b//c
if type_a==0:
d = -1
elif type_a==1:
d = 0
else:
d = 1
if type_b==0:
e = -1
elif type_b==1:
e = 0
else: e = 1
num = (num_a + d) * (num_b + e)
#打印结果
print("共要植树%d棵。" % num)
程序验证:
三、练习题——立体植树问题
在长a米宽b米高c米的长方体空间内挂上灯笼,灯笼间距或最边灯笼与长方体的界面距离都是d米。问一共要挂多少盏灯笼?注:a、b、c都可以被d整除,三方向都要分3种情况。
附录1:条件转移语句
条件转移语句有四种模式:
(1)单关键字(if)模式:
if 逻辑值 :
语句
(2)双关键字一(if、else):
if 逻辑值 :
语句1
else :
语句2
(3)双关键字二(if、elif):
if 逻辑值1 :
语句1
elif 逻辑值2 :
语句2
(4)三关键字(if、elif、else):
if 逻辑值1 :
语句1
elif 逻辑值2 :
语句2
else :
语句3
注:比较运算(>、<、>=、<=、==、!=)或逻辑运算(not、and、or、^)的值都是逻辑值,如果使用逻辑真(True),则一定执行后续语句;如果使用逻辑假(False),则一定不执行后续的语句。