求游泳次数,求四根木棒是否能拼成三角形[JavaScript实现]

229 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情

  • 题目:

  • 小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游2米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的98%。现在小玉想知道,如果要游到距离x米的地方,她需要游多少步呢。请你编程解决这个问题。

  • 解题思路:

  • 如果游泳距离小于等于2,那么由于小玉一次就能游两米所以,游泳次数count为1

  • 所以给count初始值1,给小玉游泳的距离sum初始值为2 let sum = 2 let count = 1 ;

  • 如果小玉游泳的距离sum小于目标距离x,则还需要游泳一次,即count++

  • 由于每一步都只能游出上一步距离的98%,所以每次循环使 swimlength = swimlength * 0.98

  • 小玉游泳的总距离 sum += swimlength

  • 如果sum>=x时则退出循环

        // 输入距离
        let distance = 24.3;

        // 封装函数
        function swimTimes(x) {
            // 初始化游泳距离
            let swimlength = 2
            let sum = 2
            let count = 1
            while (sum < x) {
                count++
                swimlength = swimlength * 0.98
                sum += swimlength
            }
            return count
        }
        console.log(swimTimes(distance));
  • 题目:

  • 幼稚园终于又有新的作业了。 老师安排同学用发给同学的4根木棒拼接成一个三角形。 当然按照正常的逻辑,如果不能拼接成三角形。 必然要折断某个木棍来拼接三角形。 可是懒惰的小艺当然不会费力了! 如果拼接不成三角形小艺就会把它凭借成类似边长 1 1 2的伪三角形。 如果伪三角形都拼接不成那就不交作业

  • 此处举出两种解题方法

  • 第一种解题方法 排序后暴力枚举

  • 解题思路:

  • 首先我们判断三根木棒能否拼成三角形的方法是 如果较小的两个边之和大于最大的边则构成三角形,相等则是伪三角形,小于则拼不成三角形.

  • 由于判断三角形的方法要从较小的边之和与大边比较,于是我们先把存着边的长度的数组进行从小到大排序,使用数组的sort方法 data.sort((a, b) => a - b)

  • 穷举法,如果第一条边加第二条边大于第三条边,或者第二条边加第三条边大于第四条边,则存在普通三角形return 1;

  • 如果不成立则else if 如果第一条边加第二条边等于第三条边,或者第二条边加第三条边等于第四条边,则存在伪三角形return 0;

  • 如果都不成立则构不成普通三角形和伪三角形;return -1;

      // 输入四根木棍长度录入数组
        let arr = [1, 2, 3, 3]
        function iftriangle(data) {
            // 先对数组从小到大排序
            data.sort((a, b) => a - b)
            if (data[0] + data[1] > data[2] || data[1] + data[2] > data[3]) {
                return 1
            } else if (data[0] + data[1] == data[2]  || data[1] + data[2] == data[3]) {
                return 0
            }
            return -1
        }
        console.log(iftriangle(arr));
  • 第二种解题方法 排序后 for循环遍历
  • 解题思路:
  • 首先我们判断三根木棒能否拼成三角形的方法是 如果较小的两个边之和大于最大的边则构成三角形,相等则是伪三角形,小于则拼不成三角形.
  • 由于判断三角形的方法要从较小的边之和与大边比较,于是我们先把存着边的长度的数组进行从小到大排序,使用数组的sort方法 data.sort((a, b) => a - b)
  • for循环,如果第一条边加第二条边大于第三条边,或者第二条边加第三条边大于第四条边,
  • 注意:需要i<2,因为存在i+2
  • (data[i] + data[i + 1] > data[i + 2]
  • 则存在普通三角形return 1;
  • 如果不成立则else if 如果第一条边加第二条边等于第三条边,或者第二条边加第三条边等于第四条边,
  • data[i] + data[i + 1] == data[i + 2]
  • 则存在伪三角形return 0;
  • 如果都不成立则构不成普通三角形和伪三角形;return -1;
        // 输入四根木棍长度录入数组
        let arr = [1, 2, 3, 3]

        function iftriangle(data) {
            // 先对数组从小到大排序
            data.sort((a, b) => a - b)
            for (let i = 0; i < 2; i++) {
                if (data[i] + data[i + 1] > data[i + 2]) return 1
            }
            for (let i = 0; i < 2; i++) {
                if (data[i] + data[i + 1] == data[i + 2]) return 0
            }
            return -1
        }

        console.log(iftriangle(arr));