**编程实现**

小猴家里有一片香蕉林,由于小猴的好朋友小美快要过生日了,小猴打算在一排共n棵香 蕉树中选择两颗香蕉树作为小美的生日礼物,为了显得不是那么随意,小猴认为选取的 两棵香蕉树的距离不能超过d,但是方案太多了,小猴想要先知道一共有多少种选择的方案。

已知一排香蕉树的位置坐标依次为x1,x2,x3......xn,请你帮助小猴计算一下选择两棵距离 不超过d的香蕉树的方案有多少种。

注意:方案xi、xj和方案xj、xi认为是同一种方案。

**输入描述**

第一行,包含一个整数n ( 1≤n≤5000 )。 第二行,包含n个整数x1,x2,x3......xn。 第三行,包含一个整数d。

**输出描述**

一行,包含一个整数,表示结果。

**输入样例**

5

5 16 3 20 13

10

**输出样例**

6


参考解析(方法不唯一):

假设依次输入的5个数分别是:

5  16  3  21  13

使用split()函数对一行输入的5个数进行分割,存入列表x

x=input().split()

从第一个数5开始依次与其后面的数进行运算,用abs()函数得到绝对值(绝对值是指一个数在数轴上所对应点到原点的距离,用“| |”来表示。|b-a|或|a-b|表示数轴上表示a的点和表示b的点的距离),找到符合条件的方案,计数加1;

2023年NOC青少儿编程大赛Python初中组决赛-挑选礼物

然后换第二个数16,依次与其后面的数进行运算,找到符合条件的方案,计数加1;

2023年NOC青少儿编程大赛Python初中组决赛-挑选礼物

重复上述操作,直到第n-1个即第4个数21

2023年NOC青少儿编程大赛Python初中组决赛-挑选礼物

因此需要使用2层循环,外层依次取前n-1个数,所已会重复执行n-1次

内层循环,用该数后面的数分别与该数计算(循环次数由当前数决定,假定当前是第m个数,那么他后面有n-m个数,即只需要重复n-m次),找到符合条件的方案,方案数加1。

参考程序:


#输入n
n = int(input())
#依次输入n个x坐标,空格隔开(一排)
x=input().split()#每个数分割存入列表
#输入最大间距
d = int(input())
#从左往右依次便利符合要求的坐标
count=0#统计方案数
for i in range(n-1):
    m=i+1#跟后面的坐标做差计算距离
    for k in range(n-m):
        if abs(int(x[m])-int(x[i]))<=d:#距离不超过10
            #print(int(x[m]),int(x[i]))
            count+=1
        m+=1
#输出方案数    
print(count)


本站内容未经许可,禁止任何网站及个人进行转载。