年NOC青少儿编程大赛Python初中组决赛-挑选礼物,,
年NOC青少儿编程大赛Python初中组决赛-挑选礼物,,
**编程实现**
小猴家里有一片香蕉林,由于小猴的好朋友小美快要过生日了,小猴打算在一排共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;
然后换第二个数16,依次与其后面的数进行运算,找到符合条件的方案,计数加1;
重复上述操作,直到第n-1个即第4个数21
因此需要使用2层循环,外层依次取前n-1个数,所已会重复执行n-1次
内层循环,用该数后面的数分别与该数计算(循环次数由当前数决定,假定当前是第m个数,那么他后面有n-m个数,即只需要重复n-m次),找到符合条件的方案,方案数加1。
参考程序:
#输入nn = 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)
本站内容未经许可,禁止任何网站及个人进行转载。
评论关闭