달팽이배열

분류없음 2014.11.28 11:44 |


2가지 구현
 

// Snail.cpp : Defines the entry point for the console application.
//

#include <WINDOWS.H>
#include <MATH.H>
#include <STDLIB.H>

void printXY(char * pszText , short x, short y)
{
	COORD pos = {x, y};
	HANDLE hConsole_c = GetStdHandle(STD_OUTPUT_HANDLE);
	DWORD len = strlen(pszText);
	DWORD dwBytesWritten = 0;
	WriteConsoleOutputCharacter(hConsole_c, pszText, len, pos, &dwBytesWritten);
}

int Sum(int x, int y , int size)
{
	int sum = 0;
	for (int i = 0; i < (x>y?y:x) ; i++,size--)
	{
		sum += --size;
	}
	return sum*4;
}

void Work1(int size)
{
	int x=-1,y=0;
	int inValue = 1;
	char szText[10];
	enum D{
		DOWN,RIGHT,UP,LEFT
			
	};
	D d = DOWN;
	for (int i = 0; i < size ; i++)
	{
		sprintf(szText,"% 3d",inValue++);
		printXY(szText,++x*3,0);
	}
	size--;
	while(size > 0)
	{
		for (int k = 0; k < size ; k++)
		{
			switch (d)
			{
			case DOWN:
				y++;
				break;
			case RIGHT:
				x--;
				break;
			case UP:
				y--;
				break;
			case LEFT:
				x++;
				break;
			}
			sprintf(szText,"% 3d",inValue++);
			printXY(szText,x*3,y);
		}
		size-=d%2;
		d = D((d+1)%4);
		
	}
}

void Work2(int inSize)
{
	int inValue;
	double inSize2 = inSize-1;
	char szText[10];
	for (double x = 0; x < inSize  ; x++)
	{
		for (double y = 0; y < inSize  ; y++)
		{
			int dx = abs(fabs(x - inSize2*0.5) - inSize2*0.5);
			int dy = abs(fabs(y - inSize2*0.5) - inSize2*0.5);
			int cor = dx > dy ? dy:dx ;
			cor *= 2;
			if(y-x <= 0)
			{
				inValue = Sum(dx,dy,inSize) + 1+x+y - cor;
			}else
			{
				inValue = Sum(dx+1,dy+1,inSize) + 1 -x-y + cor;
			}
			
			sprintf(szText,"% 3d",inValue);
			printXY(szText,x*3,y);
		}
	}
}
int main(int argc, char* argv[])
{
	int size;
	int work;
	printf("input size : ");
	scanf("%d",&size);
	//Work1(size);
	printf("select work[1 , 2] : ");
	scanf("%d",&work);
	system("cls");
	switch(work)
	{
	case 1:
		Work1(size);
		break;
	case 2:
		Work2(size);
		break;
	}
	getchar();
	getchar();
	return 0;
}



Posted by 동적할당

댓글을 달아 주세요

  1. 최근영 2015.11.24 22:20 신고 Address Modify/Delete Reply

    안녕하세요. 현재 자바를 공부하고 있는 학생입니다.
    이번에 학교 프로젝트 과제로 수강신청 프로그램을 만들어보려고 합니다.
    사실 프로젝트 기안서를 제출할 때부터 블로그에 올리신 수강신청 프로그램을 모티브로 하였습니다.
    혹시 실례가 안된다면 시간표 짜는 수강신청 프로그램에 대해서 몇가지 문의와 조언을 구하고 싶은데 가능할까요?

  2. 최근영 2015.11.24 22:22 신고 Address Modify/Delete Reply

    혹시 가능하다면 cgy7096@naver.com 이메일뿐만 아니라
    편하게 카카오톡을 이용하여도 괜찮습니다.
    카카오톡 아이디 : cgy7096