#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 100
int S[N];
void findMinMax(int low, int high, int& min, int& max)
{
if (low > high) return;
if (high - low == 1)
{
if (S[low] > S[high])
{
max = S[low];
min = S[high];
}
else
{
max = S[high];
min = S[low];
}
}
else if (high == low)
{
min = max = S[low];
}
else
{
int mid,min1, min2, max1, max2;
mid = (low + high) / 2;
findMinMax(low, mid, min1, max1);
findMinMax(mid + 1, high, min2, max2);
if (min1 > min2)
min = min2;
else
min = min1;
if (max1 > max2)
max = max1;
else
max = max2;
}
}
void main()
{
srand(time(NULL));
for (int i = 0; i < N; i++)
{
S[i] = rand() % 10000+1;
printf("%d ", S[i]);
}
printf("\n");
int min, max;
findMinMax(0, N - 1, min, max);
printf("min:%d and max:%d\n", min, max);
}
처음 문제를 봤을때 어떻게 구해야할지 전혀 생각이 안나서 당황했습니다.
'컴퓨터 공학' 카테고리의 다른 글
알고리즘 시험문제1 (0) | 2015.11.26 |
---|---|
n개중 k개 선택 가능한 개수 구하기 알고리즘 (0) | 2015.11.26 |
운영체제 5장 (0) | 2015.11.26 |
운영체제 4장 (0) | 2015.11.26 |
자막 만드는 방법(과거자료) (0) | 2015.11.26 |