2014-11-19 6 views
1

enter image description here
이 연습 문제를 해결할 방법을 작성해야합니까?함수는 얼마나 많은 마법 사각형이 n * m으로 만들어 지는지를 알아내는 함수입니다. 여기서 n, m - 자연수

운동 :

우리는 자연 번호 n 개의 X의 m의 제곱으로 나누어 사각형을 보유하고 있습니다. 이 직사각형 안에있는 마술 사각형의 수를 세는 함수를 작성하십시오.

매직 스퀘어는 정사각형 격자에 kxk (k> = 2) 숫자 (일반적으로 정수)가 배열 된 것으로, 각 행 및 각 열의 숫자와 주 및 보조 대각선의 숫자는 모두 같은 숫자가됩니다.

+0

"고유 번호"그래서 6,6,6,6을 마법으로 사용해서는 안됩니까? – Sopel

+0

나는 게시물을 편집했는데 숫자는 별개 일 필요가 없다. – TechnoA

+0

내가 가지고있는 유일한 아이디어는 처음에는 4 개의 작은 사각형으로 모든 사각형을 찾아서 고려해야 할 요구 사항을 충족하는지 확인해야한다. 마법의 사각형 :/ – TechnoA

답변

0

4 개 배열 구성 :

1 : 모든 요소는 원래 배열 +1의 요소입니다.

2 : 모든 요소는 원래 배열 +1에서 맨 위 요소입니다.

3 : 모든 요소는 원래 배열 +1에서 왼쪽 상단 요소입니다.

4 : 모든 요소는 원래 배열 +1에서 오른쪽 상단 요소입니다.

귀하의 배열에 대해 이와 같은 것을 얻을 수 있습니다. 이제 배열에서 가능한 모든 사각 피팅을 검사해야합니다 (더 나은 해결책이있을 수는 있지만 생각할 수는 없습니다). 배열에서 합계를 유지하므로 배열 3x3 (왼쪽 위부터)을 검사 할 때 모든 합계가 15임을 명확히 알 수 있습니다. 이는 마술 사각형을 의미합니다.

왼쪽 상단에서 시작하지 않을 때 조금 덜 분명하지만 여전히 쉽습니다. 두 번째 마술 사각이 강조 표시된 아래의 예를보십시오. 당신은 그 이비 어두운 요소 마이너스

그것은 최초의 마술 사각형에 대한 동일한 작업,하지만 제로가 될 것이다 (이 경우 12) 가벼운 요소가 일정에 대응 볼 수 있습니다, 그래서 우리는 그것을 건너 뛸 수 있습니다.

+0

downvote에 대한 이유가 무엇입니까? – Sopel

+0

하지만 마법의 사각형이 어디에 있는지 알 때만 작동합니다. 그렇습니까? – TechnoA

+0

배열에서 가능한 모든 사각형을 살펴 봐야한다고했습니다. 모든 것을 다시 계산할 필요가 없으므로 검색 속도가 빨라집니다. – Sopel