[C언어]자료구조-배열
자료구조 4주차
응용문제1 - 달팽이
N x M (1≤N, M≤100) 크기의 행렬에 1 ~ MN 의 수를 아래 그림과 같이 나선형으로 채운 결과를 출력하시오.
입력예시
4 5 ↦ 행렬 크기 N, M
출력예시
□1 2 3 4 5 ↦ 한 줄에 한 행씩 출력
□14 15 16 17 6
□13 20 19 18 7
□12 11 10 9 8
c언어 코드
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning (disable:4996)
int main()
{
int N, M, i = 0, j = -1, n = 1, x[100][100], num, dir = 1, a, b, p, q;
scanf("%d %d", &N, &M);
p = N;
q = M;
while (n <= (N*M))
{
for (a = 0; a < q; a++)
{
j += dir;
x[i][j] = n++;
}
q--;
p--;
for (b = 0; b < p; b++)
{
i += dir;
x[i][j] = n++;
}
dir = -dir;
}
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf(" %d", x[i][j]);
}
printf("\n");
}
return 0;
}
- dir은 direction이라는 변수로 방향을 나타내주고, 초기값은 1이다.
- 가로 끝을 만나면 for문을 나오고 가로와 세로 길이를 하나씩 줄인다.
- 세로 끝을 만나면 dir을 -dir로 설정해줌으로써 방향을 바꾼다.
응용문제2 - 대각선으로 채우기
N x M (1≤N, M≤100) 크기의 행렬에 1 ~ MN 의 수를 아래 그림과 같이 ↙ 대각선 방향으로 채운 결과를 출력하시오.
입력예시
4 5 ↦ 행렬 크기 N, M
출력예시
□1 2 4 7 11 ↦ 한 줄에 한 행씩 출력
□3 5 8 12 15
□6 9 13 16 18
□10 14 17 19 20
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#pragma warning (disable:4996)
int main()
{
int N, M, n = 1, i, j, a, x[100][100];
scanf("%d %d", &N, &M);
for (a = 0; a < (N+M); a++)
{
for (i = 0; i < N; i++)
{
j = a - i;
if (j >= 0 && j < M)
{
x[i][j] = n++;
}
}
}
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf(" %d", x[i][j]);
}
printf("\n");
}
return 0;
}
- i와 j의 합이 a가 되게 한다.
a가 4면 (1, 3), (2, 2), (3, 1)순으로 출력
i는 하나씩 증가하고 j는 a-i로 구하면됨.
댓글남기기