算法-初一数学题

56 阅读2分钟

先看一道题

用⭐️定义一种新运算:对于任意有理数a和b

ab=a+b+ab2a⭐b = \frac{{a + b + |a - b|}}{2}

从-9,-8,-7,-6,-5,-4,-3,-2,-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9中任选两个有理数a、b,a和b不相等, 计算(a⭐️b)的值,那么所有运算结果中的最大值是?

1.用函数的方式

import Foundation

// 定义新运算符
func newOperation(_ a: Double, _ b: Double) -> Double {
    return (a + b + abs(a - b)) / 2.0
}


// 查找所有可能组合的最大值
func findMaxResult() -> Double {
    let rationalNumbers = Array(-9...9)
    var maxResult = Double.leastNormalMagnitude  // 初始化为最小的Double值

    for a in rationalNumbers {
        for b in rationalNumbers {
            if a != b {
                let result = newOperation(Double(a), Double(b))
                maxResult = max(maxResult, result)
            }
        }
    }

    return maxResult
}

// 计算所有可能组合的最大值
let maximumResult = findMaxResult()
print("所有运算结果中的最大值是: \(maximumResult)")

2.用分情况总结的方式

a和b不相等,也就两种情况
a > b :

ab=a+b+ab2=aa⭐b = \frac{{a + b + a - b}}{2} = a

a < b :

ab=a+b+ba2=ba⭐b = \frac{{a + b + b - a}}{2} = b

总结: 总是等于大的那个数

3.用几何的想法,直接忽略a和b,也暂时忽略分母2

a和b不相等 就是一个大数和一个小数
看成从0开始的两个线段
a+b,就是求两个线段的总长
a-b的绝对值,就是两个线段的差值。
再想想
一个长线段+一个短线段+两个线段的差值,不就是两个长线段吗?
这时候再考虑分母2,就是一个长线段了
当然线段长度不能为负数。这?
-9+-8=-17,-17当然不能表示长度
但你反过来想啊,这要是如向量那样,符号表示方向,不就解释通了吗?
不对,如果表示方向,那结果应该是-18,而不是-16,再想想

4.把后面两个看成一体

也就是,后面是求绝对值,也就是a和b的位置交换不影响结果。假设b是小数:

ab=a+(b+ab)2a⭐b = \frac{{a + (b + |a - b|)}}{2}

这个括号一加上去,理解起来就更通顺了。括号里不就是等于a吗?
至此 a⭐️b = a和b那个大的数。