반응형
먼저, 달팽이 모양의 수열을 밖에서 안쪽으로, 왼쪽 위에서 아래로 시작하는 모양의 C언어 코드입니다.
배열 크기는 코드 위쪽에서 N으로 정으를 했습니다.
#include <stdio.h>
#define ROW 7
#define COL 7
int main() {
int arr[ROW][COL];
int n = 1;
int row_start = 0, row_end = ROW - 1, col_start = 0, col_end = COL - 1;
while (row_start <= row_end && col_start <= col_end) {
// 첫 번째 열부터 마지막 열까지
for (int i = row_start; i <= row_end; i++) {
arr[i][col_start] = n++;
}
col_start++;
// 마지막 행부터 첫 번째 행까지
for (int i = col_start; i <= col_end; i++) {
arr[row_end][i] = n++;
}
row_end--;
// 마지막 열부터 첫 번째 열까지
for (int i = row_end; i >= row_start; i--) {
arr[i][col_end] = n++;
}
col_end--;
// 첫 번째 행부터 마지막 행까지
for (int i = col_end; i >= col_start; i--) {
arr[row_start][i] = n++;
}
row_start++;
}
// 출력
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%3d", arr[i][j]);
}
printf("\n");
}
return 0;
}
다음 코드는 달팽이 모양의 수열을 밖에서 안쪽으로, 왼쪽 위에서 오른쪽으로(시계방향) 시작하는 모양의 C언어 코드입니다.
배열 크기는 코드 위쪽에서 N으로 정으를 했습니다.
#include <stdio.h>
#define ROW 7
#define COL 7
int main() {
int arr[ROW][COL];
int n = 1;
int row_start = 0;
int row_end = ROW - 1;
int col_start = 0;
int col_end = COL - 1;
while (row_start <= row_end && col_start <= col_end) {
// 첫 번째 열부터 마지막 열까지
for (int i = col_start; i <= col_end; i++) {
arr[row_start][i] = n++;
}
row_start++;
// 첫 번째 행부터 마지막 행까지
for (int i = row_start; i <= row_end; i++) {
arr[i][col_end] = n++;
}
col_end--;
// 마지막 열부터 첫 번째 열까지
for (int i = col_end; i >= col_start; i--) {
arr[row_end][i] = n++;
}
row_end--;
// 마지막 행부터 첫 번째 행까지
for (int i = row_end; i >= row_start; i--) {
arr[i][col_start] = n++;
}
col_start++;
}
// 출력
for (int i = 0; i < ROW; i++) {
for (int j = 0; j < COL; j++) {
printf("%3d", arr[i][j]);
}
printf("\n");
}
return 0;
}
위 코드를 알맞게 수정하면 원하는 여러 가지 방향으로 숫자를 넣을 수 있습니다.
출력 모양을 변경하지 않도록 합니다.
반응형
아래와 같이 표현할 수도 있습니다.
#include <stdio.h>
#define n 7
int main()
{
int arr[n][n];
int i, j, k = 1;
for (i = 0; i < n; i++) {
for (j = i; j < n - i; j++) {
arr[i][j] = k++;
}
for (j = i + 1; j < n - i; j++) {
arr[j][n - i - 1] = k++;
}
for (j = n - i - 2; j >= i; j--) {
arr[n - i - 1][j] = k++;
}
for (j = n - i - 2; j > i; j--) {
arr[j][i] = k++;
}
}
// 출력
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%3d", arr[i][j]);
}
printf("\n");
}
return 0;
}
반응형
'C_C++' 카테고리의 다른 글
(C언어) 이차방정식의 해: 실근 중근 허근 (0) | 2023.04.24 |
---|---|
(C언어) 2차원 배열을 시계방향으로 90도 회전시키기 (0) | 2023.04.22 |
(C언어) 연결리스트: 맨 앞에 노드 추가하기 Linked List (0) | 2023.04.12 |
(C언어) 연결리스트: 맨 뒤에 노드 추가하기 Linked List (0) | 2023.04.11 |
(C언어) 홀수 마방진 (magic square) (0) | 2023.04.09 |