Programming/C

c언어 배열90도씩이동 , 달팽이 배열

fishersheep 2021. 8. 14. 02:42
반응형

c언어 배열90도씩이동

#include <stdio.h>
int main()
{
	int arr[4][4] = {
		{1,2,3,4},
		{5,6,7,8},
		{9,10,11,12},
		{13,14,15,16}
	};
	for (int i = 0; i < 4; i++)
	{
		for (int j = 0; j < 4; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	printf("\n");

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

	for (int i = 3; i >= 0; i--)
	{
		for (int j = 3; j >= 0; j--)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}
	printf("\n");

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

	return 0;
}

달팽이 배열

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int n;
	printf("숫자를 입력하세요:");
	scanf("%d", &n);
	
	printf("\n\n");

	int** arr = (int**)malloc(sizeof(int*) * n);
	for (int i = 0; i < n; i++)
		arr[i] = (int*)malloc(sizeof(int) * n);

	int count = n;		// y축일 경우 1감소
	int current = 1;	// 대입될 숫자
	int direction = 1;	// 1 : 증가, -1 : 감소
	int directCnt = 0;	// 방향 이동 횟수 카운트
	int axis = 0;		// 0 : x축,  1 : y축

	int px = -1;
	int py = 0;

	// 1. 2번 증가 , 2번 감소
	// 2. y축일 경우 축방향 이동 수 1감소

	for (int i = 0; i < n*n; i++)
	{
		for (int j = 0; j < count; j++)
		{
			if (axis == 0)		px += direction;
			else if (axis == 1) py += direction;

			arr[px][py] = current;
			printf(" %d  %d  %d \n", px, py, arr[px][py]);

			current += 1;
		}
		
		axis = (axis == 0) ? 1 : 0;
		count = (axis == 1) ? count - 1 : count;
		directCnt += 1;

		if (directCnt == 2)
		{
			direction *= -1;
			directCnt = 0;
		}
		
		if (current > n* n) break;
	}


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


	for (int i = 0; i < n; i++)
		free(arr[i]);

	free(arr);

	return 0;
}
반응형