充值活动已开启,快来参与吧 关闭充值活动
当前位置: 高中信息技术 /
  • 1. 贪吃蛇在𝑛×𝑛(1≤𝑛≤10)的方阵中游走,它可以往上下左右四个方向游走,当穿越方阵的边界时还可以从该边界的对立面继续进入方阵。初始时你可以任意安排贪吃蛇的起点位置,并且选择一个方向一直走𝑛步。方阵中“.”表示空位置,数字表示可以吃的食物,每吃到一个数字时,这个数字便会附着到贪吃蛇的尾部,同时方阵中该数字会消失。问:在某个时刻,贪吃蛇身上会不会出现我们想要的某个整数;若有,会有多少个数会小于该整数。

    例如,在右侧5×5的方阵中可以产生[1,3,4,12,21,234,243,324,342,423,432]共11个数。其中数“234”的产生过程可以是:选择第4行第2列为起点,第一步吃掉2,接着往右走三步吃掉3,再往右走一步穿越到对面的4,吃掉它成为“234”,共五步。其中“1234”或“123”等整数是不可能出现的。

    请回答以下问题。

    1. (1) 输入方阵保存至数组𝑎,然后将贪吃蛇所有可能吃到的所有数字组合保存到数组𝑏中,请补充完该算法程序。

      dx = [0, 1, 0, -1]     # 模拟贪吃蛇往四个方向游走时行号变化的数组

      dy = [1, 0, -1, 0]     # 列号变化数组

      n = int(input())      # 方阵的大小

      a, b = [], []

      for i in range(n):

          s = input().strip().split() #方阵中的一行数据,“.”号和数字字符都以空格分隔

          a.append(s)

      def calc(i, j, p):

          x, y, res = i, j, 0

          if '0' <= a[x][y] <= '9':

              res = int(a[x][y])

              for i in range(n-1):

                  x =      # 产生新的行号

                  y = # 产生新的列号(与行号类似),代码略

                  if '0' <= a[x][y] <= '9':

                      res = res * 10 + int(a[x][y])

              return res

      for i in range(n):

          for j in range(n):

              for k in range(4):

                  num =

                  if num > 0:

                      b.append(num)

      print(b)       # 输出所有可能能产生的整数(可能会产生重复的整数)

    2. (2) 若数组 a= [['.', '1', '.'], ['.', '2', '3'], ['.', '.', '.']],上述程序处理完后𝑏数组中(选填:存在 / 不存在)整数2。
    3. (3) 对𝑏数组中的所有整数进行升序排序,输入待查找的数据,输出小于等于该数字的数有多少个。请补充完该算法程序。

      b = [1, 12, 23, 23, 23, 35, 35,146]

      输入输出示例:

      请输入待查找的整数:23

      小于等于23的数共有5个

      请输入待查找的整数:31

      小于等于31的数共有5个

      bn = len(b)

      for i in range(bn-1):

          for j in range(  ):

              if b[j] > b[j+1]:

                  b[j], b[j+1] = b[j+1], b[j]

      key = int(input("请输入待查找的整数:"))

      i, j = 0, bn-1

      while i <= j:

          m = (i + j) // 2

          if :

              i = m + 1

          else:

              j = m - 1

      print("小于等于", key, "的数共有", i, "个")