当前位置: 高中信息技术 / 综合题
  • 1. (2022高二下·嘉兴期末) 创意机器人大赛——捡硬币。比赛规则如下:

    1)在比赛场地上放置了n个硬币,每个硬币的位置均不相同,各位置坐标(x,y)保存在文本文件中(如图所示,放置了5个硬币,文本中坐标按x,y升序排列);

    2)机器人在两个硬币位置间走直线,从起点(0,0)出发,按硬币x坐标从小到大去捡,若x坐标相同,则按y坐标从小到大捡;取走其中的n-1个硬币,总行走距离最短的机器人将获得比赛的冠军。

    例:如图a所示,p2直接到p4则代表p3处硬币未取。

    图a

    图b

    图c

    完成该项目分以下几个步骤:

    1. (1) 读取坐标数据。

      从文本文件中读取硬币的坐标(x、y),分别存储在列表 x 和y 中。请在划线处填入合适的代码。

      f=open("position.txt",'r') #从文件中读取坐标位置

      x=[0];  y=[0]      #将原点坐标分别存储在x、y 列表中

      line=f.readline() #取出一行数据

      #从文本文本中读取硬币的位置,并存储在 x、y 列表中

      while line:

      data=line.split(",")       #以逗号为分隔符转换成列表

      x.append(int(data[0]))

      line=f.readline( )

      f.close() #关闭文件

    2. (2) 编写函数,计算两点间的距离。请在划线处填入合适的代码。

      from math import sqrt

      def  dist(x1,y1,x2,y2):      #计算(x1,y1)到(x2,y2)的距离

      d=

      return d

    3. (3) 设计算法与程序实现。

      机器人取走n-1个硬币经过的最短距离公式可以描述为:

      其中:为机器人取走n-1个硬币走的最短距离;为机器人取走n个硬币经过的距离之和;为机器人未取第i个硬币少走的路程;Max为求中的最大值。

      根据上述算法编写的Python程序如下,请在划线处填入合适的代码。

      n=len(x) : long=0

      for i in range(1, n):

        long=long+dist(x[i-1], y[i-1], x[i], y[i])

       

        ansi=n-1

        for i in range(2, n):

          d1=dist(x[i-2],y[i-2],x[i-1],y[i-1])

          d2=dist(x[i-1],y[i-1],x[i],y[i])

          d3=dist(x[i-2],y[i-2],x[i],y[i])

      dx=  #计算未取第i-1 个硬币少走的路程。

      if dx>maxd:

          maxd=dx

          ansi=i-1

      print("机器人行走的最短距离为:"+str(round(, 4))) print("未取走的硬币的位置为:(",x[ansi],",",y[ansi],")")

    4. (4) 调试和异常处理

      当最后一个硬币未取为最短距离时,上述程序运行结果不正确。加框处代码有误,请修改。

微信扫码预览、分享更方便