JavaScript:已知计算结果反推方程的最小整数x解
Let's break down your problem step by step—since Math.round() is the tricky part here, we'll start by unpacking what it does in your code.
Step 1: Reverse-Engineer the Rounding Logic
Your original code is:
Math.round(((x / 5) + Math.pow(x / 25, 1.3)) / 10) * 10
When the result is 320, let's define y = ((x / 5) + Math.pow(x / 25, 1.3)). The code simplifies to Math.round(y / 10) * 10 = 320.
Dividing both sides by 10 gives Math.round(y / 10) = 32.
Remember how Math.round(z) works: it returns the nearest integer. For Math.round(z) = 32, z must fall in the range [31.5, 32.5). Here's why:
- Any
z ≥ 31.5rounds up to 32 - Any
z < 32.5won't round up to 33
Substituting back z = y / 10, we get:
31.5 ≤ y / 10 < 32.5
Multiply all parts by 10 to isolate y:
315 ≤ y < 325
Where y = (x/5) + (x/25)^1.3.
Step 2: Use the Function's Monotonicity to Our Advantage
The function f(x) = (x/5) + (x/25)^1.3 is strictly increasing for positive integers x. Both terms grow as x gets larger, so f(x) can only go up as x increases. This means once we find the smallest x where f(x) ≥ 315, that's our answer (since f(x) will still be under 325 for x just above that threshold—we know x=1000 gives f(x)=321.3, which is well within the range).
Step 3: Find the Minimum x via Trial and Error
We can test values around x=1000 to find the threshold:
x=983:
f(983) = 983/5 + (983/25)^1.3 = 196.6 + (39.32)^1.3 ≈ 196.6 + 118.2 = 314.8
This is below 315, soMath.round(314.8/10) = Math.round(31.48) = 31, resulting in31*10=310(not 320).x=984:
f(984) = 984/5 + (984/25)^1.3 = 196.8 + (39.36)^1.3 ≈ 196.8 + 118.35 = 315.15
This is ≥315, soMath.round(315.15/10) = Math.round(31.515) = 32, resulting in32*10=320(matches your target).
Any x smaller than 984 will give f(x) <315, which rounds down to 31 and produces 310 instead of 320.
Final Answer
The minimum integer x that satisfies the code logic and produces the result 320 is 984.
内容的提问来源于stack exchange,提问作者Exprove

