위너님 봐주세요. 원하는 값이 나오지 않네요..
크리미걸
#includestdio.h
#includestdlib.h
int compare(int A[], int n, int B[], int m);
int compare2(int A[], int n, int B[], int m);
int main(void)
{
int size1=0,size2 = 0;
printf(배열 A의 사이즈를 입력하세요:);
scanf(%d, &size1);
printf(배열 B의 사이즈를 입력하세요:);
scanf(%d, &size2);
int* A = (int*)malloc(sizeof(int) * size1);
int* B = (int*)malloc(sizeof(int) * size2);
// 동적으로 입력된 수의 int형 메모리를 할당합니다.
// 실행중 임의의 크기로 지정할 수 있는것 말고는 배열과 똑같습니다.
printf(입력한 크기만큼 A배열의 인덱스 값을 차례대로 입력하세요(스페이스로 구분)\n);
for(int i=0; isize1; ++i)
{
scanf(%d, &A[i]);
}
for(int n=0; nsize1; ++n)
{
printf(%d,A[n]);
}
printf(\n입력한 크기만큼 B배열의 인덱스 값을 차례대로 입력하세요(스페이스로 구분)\n);
for(int j=0; jsize2; ++j)
{
scanf(%d, &B[j]);
}
for(int m=0; msize2; ++m)
{
printf(%d,B[m]);
}
printf(\n);
compare(&A[i],size1,&B[m],size2);
free(A);
free(B);
// 할당한 메모리를 돌려줍니다.
return 0;
}
int compare(int A[], int n, int B[], int m)
{
compare2(&A[0], n, &B[0], m);
if(compare2(&A[0], n, &B[0], m) 0)
{
printf(두 배열 A B중 AB입니다. -1\n);
}
else if(compare2(&A[0], n, &B[0], m) == 0)
{
printf(두 배열은 크기와 인덱스 값들이 서로 같습니다. 0 \n);
}
else
{
printf(두 배열 A B중 AB입니다. 1\n);
}
return 0;
}
int compare2(int A[], int n, int B[], int m)
{
for(int i=0;i = m; i++)
{
if(A[i]=B[i])
compare2( &A[i+1],n, &B[i+1], m);
else if(A[i] B[i] || n m)
{
return -1;
}
else if(A[i] B[i] || n m)
{
return 1;
}
else
{
return 0;
}
}
return 0;
}
흐음 크기를 다르게 해주면 바로 결과가 잘 나오는데요 문제가
크기가 같게 입력되었을 경우 A B 배열 모두 3크기로 입력받을 경우
(1 2 3) (1 2 4) 이경우 마지막 원소값에서 A[3] B[3] 이므로 배열 B값이 더 크게 결과가 나와야하는데 제 프로그램은 계속 같다고 나오네요...ㅠ..이거 뭐가 문제일까요?? 함수에 주는 파라메터가 문제일까요?ㅠㅠ...
-
텃골
네 ^^
-
겨슬
흐음..제 설명이 부족한가봐요 ㅠㅠ....으음..제가 문제의 원본을 보여드릴까요?ㅎㅎ..
-
엄지
매개변수로 어차피 포인터1, 크기, 포인터2, 크기... 다 받으니까 굳이 재귀호출같은걸 사용하지 않고도 내부에서 반복문 돌리는걸로 충분해 보입니다만...? 어쨌든 문제가 명확히 이해가 되지 않아서 잘 모르겠네요;;
-
레나
흐음..그럼 어떻게 고쳐주어야 잘 돌아갈까요??ㅠㅠ
-
말글
1. (0번째 원소 값 1 / 1 ) compare2() - 1진입 - 비교 - if문 만족 compare2() 호출
2. (1번째 원소 값 2 / 2 ) compare2() - 2진입 - 비교 - if문 만족 compare2() 호출
3. (2번째 원소 값 3 / 4 ) compare2() - 3진입 - 비교 - -1 리턴
4. compare2() - 2진입부분 반환 - 나머지 else 통과 후 0 리턴
5. compare2() - 1진입부분 반환 - -
Orange
compare2() 첫번째 if문을 만족할경우에 compare2() 를 재귀진입하게 만드셨는데요. 크기3 / 1 2 3 / 1 2 4 로 값을 줬을때 재귀 세번째에서 -1을 리턴하겠죠? 근데 그 -1을 리턴한 값이 두번째 재귀호출한 compare2() 쪽에서 리턴하기 때문에 나머지 else if 문을 건너뛰고 두번째 재귀문에서 0 리턴. 마찬가지로 첫번째 재귀호출한 compare2() 쪽에서도 0리턴. 결국 다 0 이라는...