마방 진 알고리즘
해: 마방 진 에서 각 수의 배열 규칙 은 다음 과 같다.
(1) 1 을 1 줄 의 중간 열 에 놓는다.
(2) 2 부터 n 까지×n. 각 수 를 다음 규칙 에 따라 저장 합 니 다. 각 수 에 저 장 된 줄 은 앞의 줄 보다 1 을 줄 이 고 열 수 는 1 을 추가 합 니 다 (예 를 들 어 위의 3 단계 마방 진, 5 는 4 의 이전 줄 뒤에 있 습 니 다)
(3) 위의 줄 수가 1 이면 다음 줄 수 는 n 이다.예 를 들 어 1 이 첫 줄 에 있 으 면 2 는 맨 다음 줄 에 두 어야 하고 열 수 는 똑 같이 + 1 이다.
(4) 이전 수의 열 이 n 일 때 다음 수의 열 수 는 1 이 고 줄 수 는 1 이 어야 한다. 예 를 들 어 2 는 3 줄 의 마지막 열 에 있 으 면 3 은 두 번 째 줄 의 첫 번 째 열 에 두 어야 한다.
(5) 위의 규칙 에 따라 확 정 된 위치 에 이미 숫자 가 있 거나 위의 숫자 가 첫 번 째 줄 의 n 열 일 때 다음 수 를 위의 수의 아래 에 놓는다.예 를 들 어 위의 규정 에 따 르 면 4 는 1 행 2 열 에 놓 아야 하지만 이 위 치 는 이미 1 이 차지 하기 때문에 4 는 3 에 놓 아야 한다.
아래.6 은 1 행 3 열 (즉 마지막 열) 이기 때문에 7 은 6 아래 에 놓는다.이 방법 으로 모든 단계 의 마방 진 을 획득 할 수 있 습 니 다.
코드:
1 #include
2 using namespace std;
3 #define MIN 1
4 #define MAX 20
5 #define EMPTY 0
6
7 signed main()
8 {
9 int magic_square[MAX][MAX]={EMPTY};
10 int n;
11
12 printf(" (1~15 ):");
13 scanf("%d",&n);
14 if( nMAX || !(n%2) ) printf(" , !
");
15 else{
16 int num;
17 const int _begin=1,_end=n*n;
18 int row,col;
19 for(num=_begin; num<=_end; num++){
20 if( num==_begin ){
21 row=0;
22 col=n/2;
23 }
24 else{
25 int row_n=(row-1+n)%n;
26 int col_n=(col+1)%n;
27 if( magic_square[row_n][col_n]!=EMPTY ){
28 row++;
29 }
30 else{
31 row=row_n;
32 col=col_n;
33 }
34 }
35 magic_square[row][col]=num;
36 }
37 }
38 int row,col;
39 for(row=0;row){
40 for(col=0;col){
41 printf("%5d",magic_square[row][col]);
42 }
43 printf("
");
44 }
45 return 0;
46 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.