Oliver Eyton-Williams ee1e8abd87
feat(curriculum): restore seed + solution to Chinese (#40683)
* feat(tools): add seed/solution restore script

* chore(curriculum): remove empty sections' markers

* chore(curriculum): add seed + solution to Chinese

* chore: remove old formatter

* fix: update getChallenges

parse translated challenges separately, without reference to the source

* chore(curriculum): add dashedName to English

* chore(curriculum): add dashedName to Chinese

* refactor: remove unused challenge property 'name'

* fix: relax dashedName requirement

* fix: stray tag

Remove stray `pre` tag from challenge file.

Signed-off-by: nhcarrigan <nhcarrigan@gmail.com>

Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2021-01-12 19:31:00 -07:00

82 lines
1.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 5900f3931000cf542c50fea6
title: 问题39整数直角三角形
challengeType: 5
videoUrl: ''
dashedName: problem-39-integer-right-triangles
---
# --description--
如果p是具有整数长度边的直角三角形的周长{abc}则对于p = 120恰好有三个解。{20,48,52}{24,45,51}{ 30,40,50}对于p≤n的值最大化解的数量是多少
# --hints--
`intRightTriangles(500)`应该返回420。
```js
assert(intRightTriangles(500) == 420);
```
`intRightTriangles(800)`应该返回420。
```js
assert(intRightTriangles(800) == 720);
```
`intRightTriangles(900)`应该返回840。
```js
assert(intRightTriangles(900) == 840);
```
`intRightTriangles(1000)`应该返回840。
```js
assert(intRightTriangles(1000) == 840);
```
# --seed--
## --seed-contents--
```js
function intRightTriangles(n) {
return n;
}
intRightTriangles(500);
```
# --solutions--
```js
// Original idea for this solution came from
// https://www.xarg.org/puzzle/project-euler/problem-39/
function intRightTriangles(n) {
// store the number of triangles with a given perimeter
let triangles = {};
// a is the shortest side
for (let a = 3; a < n / 3; a++)
// o is the opposite side and is at least as long as a
for (let o = a; o < n / 2; o++) {
let h = Math.sqrt(a * a + o * o); // hypotenuse
let p = a + o + h; // perimeter
if ((h % 1) === 0 && p <= n) {
triangles[p] = (triangles[p] || 0) + 1;
}
}
let max = 0, maxp = null;
for (let p in triangles) {
if (max < triangles[p]) {
max = triangles[p];
maxp = parseInt(p);
}
}
return maxp;
}
```