마방진이란


정보처리기사 배열 마방진(Magic Square) 만들기 입니다.


#include <stdio.h>

//마방진의 크기를 결정
//홀수로 입력하되, 19미만이 보기 좋음
//7이상부터 19까지는 대각선 "우상좌하" 의 합이 다른 합과 다름
#define MAX 19

int main()
{
	//좌표 0, 2부터 시작 
	int i(0), j(2), k(1);
	int arr[MAX][MAX];

	for(k=1 ; k<=(MAX*MAX) ; k++)
	{
		//처음 0, 2에 1을 대입 
		arr[i][j] = k;
		
		//k가 배열 크기의 배수이면 규칙에 따라 행만 증가
		if(k%MAX == 0)
			++i;

		//k가 배열 크기의 배수가 아니면 규칙에 따라 "행감소, 열증가"
		if(k%MAX != 0)
		{			

			//마방진 규칙 "행감소, 열증가"
			--i;
			j++;

			//행이 감소하다가 0보다 작아지면 배열 크기의 가장 큰 값으로 교체
			if(i < 0)	i = MAX-1;

			//열이 증가하다가 배열 크기보다 커지면 0으로 교체
			if( j > (MAX-1) )	j = 0;
		}
	}

	//출력
	for(i=0 ; i<MAX ; i++)
	{
		for(j=0 ; j<MAX ; j++)
		{
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}

	printf("\n");

	return 0;
}



정보처리기사 배열 달팽이 만들기 입니다.


#include<stdio.h>

//달팽이의 크기를 지정
//홀수를 입력하되 19미만이 보기 좋음
#define MAX 7

int main()
{
	int i(0), j(-1), k(0), p, n(MAX);		//i=행, j=열, k=대입값
	int sw(1);
	int arr[MAX][MAX]={0};

	//달팽이 모양으로 대입
	while( n>0 )
	{
		//열 증가 및 감소
		for( p=0 ; p<n ; p++ )
		{
			j = j + sw;
			arr[i][j] = ++k;
		}
		
		//달팽이를 채워감에 따라 감소하는 수
		--n;
		
		//행 증가 및 감소
		for( p=0 ; p<n ; p++ )
		{
			i = i + sw;
			arr[i][j] = ++k;
		}

		//sw값이 1, -1을 반복
		sw = sw*(-1);
	}

	//출력
	for( i=0 ; i<MAX ; i++ )
	{
		for( j=0 ; j<MAX ; j++ )
		{
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}
	
	printf("\n");

	return 0;
}


정보처리기사 배열 다이아몬드 만들기 입니다.


#include <stdio.h>

//다이아몬드의 크기를 지정
//"홀수"만 입력하되 19미만이 보기 좋음
#define MAX 13

int main()
{
	int row, col, k(0);		//row=행, col=열
	int begin(0), end(0);
	int center=MAX⁄2;
	int arr[MAX][MAX]={0};

	//대입
	for( row=0 ; row<MAX ; row++ )
	{
		//상
		if(row <= center)
		{
			begin = center -row ;
			end = row+center ;
		}
		
		//하
		if(row > center)
		{
			begin = row-center ;
			//끝 값이 MAX의 크기에 비례하여 대입
			end = (MAX+center-1)-row ;
		}

		//상하에 따라 대입
		for( col=begin ; col<=end ; col++ )
		{
			++k;
			arr[row][col] = k;
		}
	}

	//출력
	for( row=0 ; row<MAX ; row++ )
	{
		for( col=0 ; col<MAX ; col++ )
		{
			printf( "%4d", arr[row][col]);
		}
		printf( "\n" );
	}

	printf( "\n" );

	return 0;
}



정보처리기사 배열 모래시계 만들기 입니다.



#include <stdio.h>

//모래시계의 크기를 지정
//"홀수"만 입력하되 19미만이 보기 좋음
#define MAX 13

int main()
{
	int row, col, k(0);		//row=행, col=열
	int begin(0), end(0);
	int center=MAX⁄2;
	int arr[MAX][MAX]={0};

	//상하로 나누어 모래시계 모양으로 대입
	for(row=0 ; row<MAX ; row++)
	{
		//상
		if(row <= center)
		{
			begin = row; 
			end = MAX-row;
		}

		//하
		if(row > center)
		{
			begin = (MAX-1)-row; 
			end = row+1;		
		}

		//if문에 따라 대입되는 값이 변함
		for(col=begin ; col<end ; col++)
		{
			++k;
			arr[row][col] = k;
		}
	}

	//출력
	for(row=0 ; row<MAX ; row++)
	{
		for(col=0 ; col<MAX ; col++)
		{
			printf("%4d", arr[row][col]);
		}
		printf("\n");
	}

	printf("\n");

	return 0;
}


정보처리기사 배열 대각선 채우기 입니다.

#include <stdio.h>

//행, 열의 크기를 지정, 10미만일때 보기 편함.
#define MAX 10

int main()
{
	int arr[MAX][MAX]={0};
	int i, j, k(0);
	int spin;

	//대각선으로 대입
	for(spin=2 ; spin<=(MAX*2) ; spin++ )
	{
		for(i=1 ; i<=MAX ; i++)
		{
			//대각선 대입 규칙
			j = spin-i;
		
			//j값이 특정 범위 내일 때만 대입
			if(j <= MAX && j > 0)
			{
				++k;

				//각각 -1하는 건 spin과 i의 초기값이 2와 1이어서( 1, 1=2-1 )
				arr[i-1][j-1] = k;
			}
		}//for i
	}//for spin

	⁄⁄출력
	for(i=0 ; i<MAX ; i++)
	{
		for(j=0 ; j<MAX ; j++)
		{
			printf("%2d ", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}




//ㄹ자 채우기
#include <stdio.h>

#define _ROW 9
#define _COL 7

int main()
{
	int arr[_ROW][_COL];
	int i, j;
	int cnt(0);

	for(i=0 ; i<_ROW ; i++)
	{
		if(i%2 == 0)
		{
			for(j=0 ; j<_COL ; j++)
			{
				++cnt;
				arr[i][j] = cnt;
			}
		}

		else
		{
			for(j=_COL-1 ; j>=0 ; j--)
			{
				++cnt;
				arr[i][j] = cnt;
			}//for j
		}//if
	}//for i

	for(i=0 ; i<_ROW ; i++)
	{
		for(j=0 ; j<_COL ; j++)
		{
			printf("%4d", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}


//5행 5열 직각삼각형
#include <stdio.h>

int main()
{
	int i, j, k(0);
	int arr[5][5];
	
	for( i=0 ; i<5; i++ )
	{
		for( j=i ; j>=0 ; j-- )
		{
			++k;
			arr[i][j] = k;
		}
	}

	for( i=0 ; i<5; i++ )
	{
		for( j=0 ; j<=i ; j++ )
		{
			printf("%3d", arr[i][j]);
		}
		printf("\n");
	}

	return 0;
}


#include <stdio.h>

#define MAX 5

int main()
{
	int i, j;
	int jumsu[MAX];
	int rank[MAX];

	for(i=0 ; i<MAX ; i++)
	{
		printf("%d번 학생의 점수를 입력 : ", i+1);
		scanf("%d", &jumsu[i]);
		
		//모두 1등으로 초기화
		rank[i]=1;
	}

	printf("\n");

	//나보다 높은 점수가 있으면 +1
	for(i=0 ; i<MAX ; i++)
	{
		for(j=0 ; j<MAX ; j++)
		{
			if(jumsu[i] < jumsu[j])
			{
				++rank[i];
			}
		}
	}

	//출력부
	for(i=0 ; i<MAX ; i++)
	{
		printf("%d번 학생의 점수는 %d, 순위는 %d입니다.\n", i+1, jumsu[i], rank[i]);
	}

	return 0;
}



#include <stdio.h>

#define MAX 10

int main()
{
	int arr[MAX];
	int i, j=1;
	int HIGH, LOW, MID;

	//배열 공간 초기화
	for(i=0 ; i<MAX ; i++)
	{
		arr[i] = j;
		j += 2;
	} 

	printf("0을 입력하면 종료");
	
	while(1)
	{
		bool state(1);
		int key;

		LOW = 0;
		HIGH = MAX;
		MID = (LOW+HIGH)/2;

		//배열 공간의 내용을 보여줌
		for(i=0 ; i<MAX ; i++)
		{
			printf("%2d번지 : %2d\n", i+1, arr[i]);
		}

		//키 값을 입력
		printf("\nkey값을 입력하세요 : ");
		scanf("%d", &key);
		if(key <= 0) return 0;

		//2진 검색
		while(state == 1)
		{
			MID = (LOW+HIGH)/2;

			if(arr[MID] == key)
			{
				printf("%d번지에 있습니다.\n\n", MID+1);
				state = 0;
			}
			if(key < arr[MID])
			{
				if(arr[MAX-1]<key)	
					state = 0;

				HIGH = MID-1;
			}
			if(key > arr[MID])
			{
				LOW = MID+1;
			}
		}
		//printf("값이 없습니다.");
	}

	return 0;
}



#include <stdio.h>

void insertion_sort( int *nArr, int nCount )
{
	int i(0), j(0);
	int key = 0;

	for( i=1 ; i<nCount ; ++i )
	{
		key=nArr[i];
		for( j=i-1 ; j>=0 ; --j )
		{
			if( nArr[j]>key )
			{
				nArr[j+1] = nArr[j];
			}
			else
			{
				break;
			}
		}
		nArr[j+1] = key;
	}
	int a = 9;
}

int main( )
{
	int nArr[] = { 7, 3, 8, 0, 2, 1, 5, 13, 6 };
	int nCount = sizeof(nArr)/sizeof(*nArr);
	
	insertion_sort( nArr, nCount );

	for( int i=0 ; i<nCount ; ++i )
	{
		printf( "%d\n", nArr[i] );
	}

	return 0;
}


+ Recent posts