/*(6) 배열에서 다음을 만족하는 배열의 두 원소 x, y를 찾는 함수:
배열에서 x는 y보다 앞에 있으면서 y-x의 값이 최대
예: 다음 배열에서 x = 3, y = 19이다.
6 15 9 7 20 3 5 19 1 12*/
#include<iostream>
#include<assert.h>
using namespace std;
int i;
int savenum;
struct absarray
{
int arr[8000];
int index1;
int index2;
int saveindex;
int saveindex2;
};
absarray maxnum(absarray input)
{
if (i == 2)
{
return input;
}
else
{
if (input.index1 == 1 && input.index2 == 0) //처음 시도
{
savenum = input.arr[input.index1] - input.arr[input.index2];
input.saveindex = input.index1;
input.saveindex2 = input.index2;
input.index1++;
return maxnum(input);
}
else //본격적 비교 시작.
{
if (savenum < (input.arr[input.index1] - input.arr[input.index2])) //전의 비교한수와 다음 비교수
{
savenum = (input.arr[input.index1] - input.arr[input.index2]);
input.saveindex = input.index1; //좌표 저장.
input.saveindex2 = input.index2;
if (input.index1 > i - 1)
{
input.index2++;
input.index1 = input.index2 + 1;
}
if (input.index2 > i - 1)
{
return input;
}
return maxnum(input);
}
else
{
input.index1++; //다음 거 비교하기 위해 1칸 이동
if (input.index1 > i - 1) // 이동했는데 배열의 마지막 거보다 커져버리면 리셋
{
input.index2++;
input.index1 = input.index2 + 1;
}
if (input.index2 > i - 1)
{
return input;
}
return maxnum(input);
}
}
}
}
int main()
{
absarray start;
cout << "배열에 입력할 갯수를 입력해주세요(2개이상)";
cin >> i;
assert(i >= 2);
cout << "배열의 최대값 구해주기 배열에 들어갈 수 입력 :";
for (int a = 0; a < i; a++)
cin >> start.arr[a];
start.index1 = 1;
start.index2 = 0;
absarray copy = maxnum(start);
cout << copy.arr[copy.saveindex] << endl;
cout << copy.arr[copy.saveindex2] << endl;
return 0;
}