zoukankan      html  css  js  c++  java
  • 方阵中的最大乘积

    题目

    在这个 n×n 方阵中,4个在同一方向(从下至上、从上至下、从右至左、从左至右或者对角线)上相邻的数的乘积最大是多少?

    代码一

    把乘积先存在一个数组里,然后从成绩数组里找最大值。

      const testGrid = [
        [40, 17, 81, 18, 57],
        [74, 4, 36, 16, 29],
        [36, 42, 69, 73, 45],
        [51, 54, 69, 16, 92],
        [7, 97, 57, 32, 16]
      ];
      function largestGridProduct(arr) {
        let len = arr.length;
        largest = arr[0][0]
        //横向的4位数之和
        console.log('横向的4位数之和')
        for (let row = 0; row < len; row++) {
          for (let col = 0; col < len - 3; col++) {
            console.log(arr[row][col], arr[row][col + 1], arr[row][col + 2], arr[row][col + 3])
            largest = getLargest(arr[row][col] * arr[row][col + 1] * arr[row][col + 2] * arr[row][col + 3])
          }
        }
        //纵向的4位数之和
        console.log('纵向的4位数之和')
        for (let row = 0; row < len - 3; row++) {
          for (let col = 0; col < len; col++) {
            console.log(arr[row][col], arr[row + 1][col], arr[row + 2][col], arr[row + 3][col])
            largest = getLargest(arr[row][col] * arr[row + 1][col] * arr[row + 2][col] * arr[row + 3][col])
          }
        }
        console.log('对角线4为数之和')
        //对角线4为数之和
        for (let row = 0; row < len - 3; row++) {
          for (let col = 0; col < len - 3; col++) {
    
            console.log(arr[row][col], arr[row + 1][col + 1], arr[row + 2][col + 2], arr[row + 3][col + 3])
            largest = getLargest(arr[row][col] * arr[row + 1][col + 1] * arr[row + 2][col + 2] * arr[row + 3][col + 3])
          }
        }
        console.log('/对角线4为数之和')
        ///对角线4为数之和
        for (let row = 3; row < len; row++) {
          for (let col = 3; col < len; col++) {
    
            console.log(arr[row][col], arr[row - 1][col - 1], arr[row - 2][col - 2], arr[row - 3][col - 3])
            largest = getLargest(arr[row][col] * arr[row - 1][col - 1] * arr[row - 2][col - 2] * arr[row - 3][col - 3])
          }
        }
        console.log(largest)
        return largest;
      }
      function fun() {
        let largest = 0;
        return function (n) {
          if (n > largest) {
            largest = n;
          }
          return largest
        }
      }
      let getLargest = fun();
      largestGridProduct(testGrid);
    

    代码二

    用闭包,存最大值

      const testGrid = [
        [40, 17, 81, 18, 57],
        [74, 4, 36, 16, 29],
        [36, 42, 69, 73, 45],
        [51, 54, 69, 16, 92],
        [7, 97, 57, 32, 16]
      ];
      function largestGridProduct(arr) {
        let len = arr.length;
        productArr = [];
        //横向的4位数之和
        console.log('横向的4位数之和')
        for (let row = 0; row < len; row++) {
          for (let col = 0; col < len - 3; col++) {
            console.log(arr[row][col], arr[row][col + 1], arr[row][col + 2], arr[row][col + 3])
            productArr.push(arr[row][col] * arr[row][col + 1] * arr[row][col + 2] * arr[row][col + 3])
          }
        }
        //纵向的4位数之和
        console.log('纵向的4位数之和')
        for (let row = 0; row < len - 3; row++) {
          for (let col = 0; col < len; col++) {
            console.log(arr[row][col], arr[row + 1][col], arr[row + 2][col], arr[row + 3][col])
            productArr.push(arr[row][col] * arr[row + 1][col] * arr[row + 2][col] * arr[row + 3][col])
          }
        }
        console.log('对角线4为数之和')
        //对角线4为数之和
        for (let row = 0; row < len - 3; row++) {
          for (let col = 0; col < len - 3; col++) {
            console.log(arr[row][col], arr[row + 1][col + 1], arr[row + 2][col + 2], arr[row + 3][col + 3])
            productArr.push(arr[row][col] * arr[row + 1][col + 1] * arr[row + 2][col + 2] * arr[row + 3][col + 3])
          }
        }
        console.log('/对角线4为数之和')
        ///对角线4为数之和
        for (let row = 3; row < len; row++) {
          for (let col = 3; col < len; col++) {
            console.log(arr[row][col], arr[row - 1][col - 1], arr[row - 2][col - 2], arr[row - 3][col - 3])
            productArr.push(arr[row][col] * arr[row - 1][col - 1] * arr[row - 2][col - 2] * arr[row - 3][col - 3])
          }
        }
        console.log(fun(productArr))
        return fun(productArr);
      }
      function fun(arr) {
        let n = 0;
        for (i of arr) {
          if (i > n) {
            n = i
          }
        }
        return n
      }
      largestGridProduct(testGrid);
    
  • 相关阅读:
    codeforces 617 E. XOR and Favorite Number(莫队算法)
    bzoj 2038 [2009国家集训队]小Z的袜子(hose) 莫队算法
    HDU 6024 Building Shops (简单dp)
    Codeforces Round #417 B. Sagheer, the Hausmeister
    第九届ECNU Coder K.计软联谊
    解决在linux安装网易云音乐无法点击图标打开
    [洛谷P1169] [ZJOI2007]棋盘制作
    [洛谷P2577] [ZJOI2005]午餐
    [洛谷P1941] 飞扬的小鸟
    [洛谷P1600] 天天爱跑步
  • 原文地址:https://www.cnblogs.com/superlizhao/p/12207203.html
Copyright © 2011-2022 走看看