edit fork download

  1. /*(6) 배열에서 다음을 만족하는 배열의 두 원소 x, y를 찾는 함수:
  2. 배열에서 x는 y보다 앞에 있으면서 y-x의 값이 최대
  3.   예: 다음 배열에서 x = 3, y = 19이다.
  4.   6 15 9 7 20 3 5 19 1 12*/
  5.  //군머 갔다와서 머가리 빈상태로 짠거라.. 이해해주세요 엉망같아도.. ㅠ
  6. #include<iostream>
  7. #include<assert.h>
  8. using namespace std;
  9. int i;
  10. int savenum;
  11. struct absarray
  12. {
  13. int arr[8000];
  14. int index1;
  15. int index2;
  16. int saveindex;
  17. int saveindex2;
  18. };
  19. absarray maxnum(absarray input)
  20. {
  21. if (i == 2)
  22. {
  23. return input;
  24. }
  25. else
  26. {
  27. if (input.index1 == 1 && input.index2 == 0) //처음 시도
  28. {
  29. savenum = input.arr[input.index1] - input.arr[input.index2];
  30. input.saveindex = input.index1;
  31. input.saveindex2 = input.index2;
  32. input.index1++;
  33. return maxnum(input);
  34. }
  35. else //본격적 비교 시작.
  36. {
  37. if (savenum < (input.arr[input.index1] - input.arr[input.index2])) //전의 비교한수와 다음 비교수
  38. {
  39. savenum = (input.arr[input.index1] - input.arr[input.index2]);
  40. input.saveindex = input.index1; //좌표 저장.
  41. input.saveindex2 = input.index2;
  42. if (input.index1 > i - 1)
  43. {
  44. input.index2++;
  45. input.index1 = input.index2 + 1;
  46. }
  47. if (input.index2 > i - 1)
  48. {
  49. return input;
  50. }
  51. return maxnum(input);
  52. }
  53. else
  54. {
  55. input.index1++; //다음 거 비교하기 위해 1칸 이동
  56. if (input.index1 > i - 1) // 이동했는데 배열의 마지막 거보다 커져버리면 리셋
  57. {
  58. input.index2++;
  59. input.index1 = input.index2 + 1;
  60. }
  61. if (input.index2 > i - 1)
  62. {
  63. return input;
  64. }
  65. return maxnum(input);
  66. }
  67. }
  68.  
  69. }
  70.  
  71.  
  72. }
  73.  
  74. int main()
  75. {
  76. absarray start;
  77. cout << "배열에 입력할 갯수를 입력해주세요(2개이상)";
  78. cin >> i;
  79. assert(i >= 2);
  80. cout << "배열의 최대값 구해주기 배열에 들어갈 수 입력 :";
  81. for (int a = 0; a < i; a++)
  82. cin >> start.arr[a];
  83. start.index1 = 1;
  84. start.index2 = 0;
  85. absarray copy = maxnum(start);
  86. cout << copy.arr[copy.saveindex] << endl;
  87. cout << copy.arr[copy.saveindex2] << endl;
  88.  
  89. return 0;
  90.  
  91.  
  92. }