※ 단지 값을 바꾸는 것이 아니라 배열 자체의 위치를 바꾸는 것임
#include<stdio.h> // N x N 행렬 오름차순 함수 void ascending(int num, int arr[][10]) { int i, j, k, l, temp = 0; // i , j 와 k, l를 비교 int InitialValue_k, InitialValue_l; // 초기값 k, l 변수 설정 for (i = 0; i < num; i++) { for (j = 0; j < num; j++) { InitialValue_k = i; InitialValue_l = j + 1; if (j == num - 1 && i < num - 1) // N x N에서 뒤에 N이 마지막 숫자라면 다음 행의 i와 비교 InitialValue_k = i + 1; for (k = InitialValue_k; k < num; k++) { if (k > i) InitialValue_l = 0; // k 가 i 보다 크면 l은 0부터 비교 for (l = InitialValue_l; l < num; l++) { if (arr[i][j] > arr[k][l]) { temp = arr[k][l]; arr[k][l] = arr[i][j]; arr[i][j] = temp; } } } } } } // 역순 함수 int change(int num, int arr[][10]) { int i, j; int temp = 0; for (i = 0; i < num; i++) { for (j = 0; j < num; j++) { // 처음과 끝의 배열 교체 temp = arr[i][j]; arr[i][j] = arr[(num - 1) - i][(num - 1) - j]; arr[(num - 1) - i][(num - 1) - j] = temp; if (num % 2 == 0) { // 짝수라면 num / 2의 지점에서 끝냄 if (i == num / 2 && j == num / 2) return 0; } else { // 홀수라면 정 중앙 지점에서 끝냄 if (i == (num - 1) / 2 && j == (num - 1) / 2) return 0; } } } } int main() { int i, j; int num; int arr[10][10] = { 0, }; printf("n을 입력하세요(3~10) : "); scanf_s("%d", &num); printf("%d X %d 행렬 입력 : \n", num, num); // N x N 행렬 입력 for (i = 0; i < num; i++) { for (j = 0; j < num; j++) { scanf_s("%d", &arr[i][j]); } } ascending(num, arr); // 오름차순 함수 호출 change(num, arr); // 역순 함수 호출 // N x N 행렬 출력 for (i = 0; i < num; i++) { for (j = 0; j < num; j++) printf("[%d]\t", arr[i][j]); printf("\n"); } }
'Programming > C' 카테고리의 다른 글
[C] 짱짱 포인터 분석 1 (0) | 2017.04.09 |
---|---|
[C] N x N 행렬 오름차순 ㄹ 정렬 (0) | 2017.04.03 |
[C] N x N 행렬 오름차순 정렬 (0) | 2017.04.03 |
[C] 2017년 달력 출력 (0) | 2017.04.03 |
[C] 10개의 값 입력 받고 오름차순 내림차순 정렬 (0) | 2017.04.03 |
댓글