10칸짜리 배열선언하고 10개 정수를 입력받는데
홀수면 앞에서 채워나가고 짝수면 뒤에서 채워나가는거임
1 2 3 4 5 6 7 8 9 10 이면
1 3 5 7 9 10 8 6 4 2 이렇게
#include<stdio.h>
int main(void)
{
int i, n = 0, m = 0; // n은 짝수 m은 홀수
int arr;
printf(" m = %d, n= %d ", m, n);
for (i = 0; i < 10; i++)
{
printf("출력 : ");
scanf_s("%d", &arr[i]);
if (arr[i] % 2 == 0)
{
arr[9 - n] = arr[i];
n++;
} // 짝수는 배열 뒤로
else if (arr[i] % 2 == 1)
{
arr[m] = arr[i];
m++;
}// 홀수는 배열 앞으로
printf(" m = %d, n= %d ", m, n);
}
printf(" 배열 요소 출력 : ");
for (i = 0; i < 10; i++)
printf("%d ", arr[i]);
return 0;
}
출력하면
1 3 5 7 9 10 8 8 9 10
이래돼..나 화딱지나서 못살겠어
내가 손으로 그려보면 맞는거같은데 해결이안되네 도와주세요....
ㄴㄴ
로직은 맞는데 arr[9 - n] = arr[i]; 이런 코드가 문제인것이죠. 예를들어서 배열이 2,3,4,5,6,7,8,9,10 다. 그러면 i = 0일때 arr[i]는 arr[0]이고 arr[0]은 2니까 arr[9 - n] = arr[i]; 이 코드 타면서.. arr[9]가 2로 바뀌겠죠? 그러면 이 시점에서 배열이 2,3,4,5,6,7,8,9,2 로 바뀌는거자나여 그러면 정렬을 계속 진행했을때 값이 뒤섞일수밖에 없는거죵
이 경우에 i가 9면 10이라는 값을 가지고 검사를 해야되는데... i가 0일때 a[9]가 2로바뀌어서 10이라는 값이 사라져버린거자나여
오... 그러네여 .. 이게 초기화할수록 배열이 배열을덮어버려서 뒤죽박죽이되는거네요
arr[9-n] arr[m] 이거를 바꾸며될까요?
생각하기 귀찮으면 걍 배열 2개만들어서 홀수짝수 따로넣고 짝수만 리버스 해서 짜로 출력해 - dc App
자료구조 배웠으면 덱으로 만듦 - dc App
안배웠슴 . . .