@DarCKoder

В чём дело (Euler Problem 39)?

Задача здесь.

А вот и моя реализация.
function isTraingle(a, b, c) {
	if( a*a + b*b == c*c) {
		return true;
	}
	return false;
}
var traingles = [];

for (var i = 1; i < 998 ; i++) {
	for (var j = 1; j < 998; j++) {
		for (var k = 1; k < 998; k++) {
			var p = i + j + k;
			if(isTraingle(i, j, k)) {
				if(traingles[p]) {
					var flag = true;
					for (var q = 0; q < traingles[p].length; q++) {
						var arr = traingles[p][q];
						if( arr.indexOf(i) >= 0 && arr.indexOf(j) >= 0 && arr.indexOf(k) >= 0) {
							flag = false
							break;
						} 
					}
					if( flag ) {
						traingles[p].push([i,j,k]);
					}
				} else {
					traingles[p] = [[i,j,k]];
				}
			}
		}
	}
}

var max = 0;
var perimetr = 0;
traingles.forEach(function(el) {
	if(el.length > max) {
		max = el.length;
		perimetr = el[0][0] + el[0][1] + el[0][2];
	}
})

console.log(traingles, max, perimetr);


Немного погуглив, нашёл ответ, ответ равен p = 840;
В моём же случае, выходит 1680.
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 2
DirecTwiX
@DirecTwiX
"display: flex;" уже предлагали?
Какое значение p ≤ 1000 дает максимальное число решений?


Upd:
if( arr.indexOf(i) >= 0 && arr.indexOf(j) >= 0 && arr.indexOf(k) >= 0) {
   flag = false
   break;
}

Данная вроверка, похоже, слабовата. Если в массиве будет, например, [8,7,6], то алгоритм посчитает, что треугольник [6,6,8] уже был
Ответ написан
b0nn1e
@b0nn1e
Alcohol & Ruby on Rails
Мне кажется у вас есть дублирующиеся варианты т.е:
20,48,52 == 48,20,52
Это один и тот-же треугольник но повернутый.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы