fork download
  1. #include <iostream>
  2. #include <algorithm>
  3.  
  4. typedef unsigned int uint32;
  5.  
  6. using namespace std;
  7.  
  8. /*GLOBAL*******neki niz od 0 - 100*/
  9. uint32 data[] = { 27 , 18 , 0 ,3 , 5 , 4 , 6 , 7 , 8 , 14 };
  10. /**********************************/
  11.  
  12. class NumberManager {
  13. public:
  14. NumberManager() {}
  15. ~NumberManager() {}
  16.  
  17. uint32* getMaxNum(uint32* begin , uint32 end);
  18. uint32 getMaxValue() const {return *maxValue;}
  19. void swapValues( uint32* first , uint32* second);
  20.  
  21. protected:
  22. void update();
  23.  
  24. private:
  25. /*daj flagove na bitne vrijednosti*/
  26. uint32* maxValue;
  27.  
  28. };
  29.  
  30. void NumberManager::swapValues( uint32* first , uint32* second)
  31. {
  32. ptrdiff_t shift;
  33. if(second == maxValue)
  34. {
  35. shift = first - second;
  36. }
  37.  
  38. if(first == maxValue )
  39. {
  40. shift = second - first;
  41. }
  42.  
  43. swap( *first , *second );
  44. maxValue += shift;
  45. }
  46.  
  47. void NumberManager::update()
  48. {
  49. /* operacija 1
  50.   /* operacija 2
  51.   /* operacija ...*/
  52. }
  53.  
  54. bool maxTwoUint32(uint32 i, uint32 j)
  55. {
  56. /* static int counter;
  57.   cout<< "loop : " << counter++ << endl; */
  58. return i<j;
  59. }
  60.  
  61. uint32* NumberManager::getMaxNum(uint32* begin , uint32 end)
  62. {
  63. maxValue = max_element(begin , begin+end , maxTwoUint32);
  64. return maxValue;
  65. }
  66.  
  67.  
  68. bool oddValue (uint32 val)
  69. {
  70. return ((val%2)==1);
  71. }
  72.  
  73.  
  74. int main()
  75. {
  76.  
  77. NumberManager numManager;
  78.  
  79. /* frame 1 INITIALIZATION****************************************************/
  80. uint32* result = numManager.getMaxNum(data , 10);
  81. cout<< "FRAME 1\nOvdje po onome kako si predstavio problem imaš \n"
  82. << "unsorted array pa time i O(n) limitacije kod trazenja\n"
  83. << "najveceg broja" << endl;
  84. cout<< "najveci broj : " << *result << "\n\n" << endl;
  85. /***************************************************************/
  86.  
  87.  
  88. /*frame 2 CHANGE******************************************************/
  89. for(uint32 i=0 ; i<10 ; i++)
  90. {
  91. data[i] += 83;
  92. }
  93. /*ova operacija koja slijedi je nepotrebna dalje jer
  94.   ako je na indexu 9 (u ovom slučaju broj 19) bio najveći broj
  95.   , bit će i dalje nakon operacija mnozenja i zbrajanja tako
  96.   da u ovom frameu nije potreban checking*/
  97. result = numManager.getMaxNum(data , 10);
  98. cout<< "FRAME 2\nnajveci broj nakon sto je na svaki broj u data \n" <<
  99. "dodan 83 je : " << *result << endl;
  100.  
  101. for(uint32 i=0 ; i<10 ; i++)
  102. {
  103. cout<< data[i] << endl;
  104. }
  105.  
  106. /***************************************************************/
  107. /* znaci prilagoditi main algoritme da uopce ne provjeravaju */
  108. /* ishode koji su unaprijed logikom znani */
  109. /***************************************************************/
  110.  
  111.  
  112.  
  113. /*frame 3 CHANGE_AGAIN******************************************************/
  114. numManager.swapValues( data , data+2 );
  115. cout<< "\n\nFRAME 3\n";
  116. for(uint32 i=0 ; i<10 ; i++)
  117. {
  118. cout<< data[i] << endl;
  119. }
  120. cout<< "swap nultog i 2 index-a" << endl;
  121. cout<< "najveci broj : " << numManager.getMaxValue()
  122. << " s direktnim pristupom" << endl;
  123. /*******************************************************************/
  124. /* imas odmah dohvat na max_element koji gore pratis u samoj klasi */
  125. /* bez rolanja kroz sve elemente */
  126. /*******************************************************************/
  127.  
  128. /**********************/
  129. /* itd... */
  130. /**********************/
  131.  
  132.  
  133. return 0;
  134. }
Success #stdin #stdout 0.01s 2724KB
stdin
Standard input is empty
stdout
FRAME 1
Ovdje po onome kako si predstavio problem imaš 
unsorted array pa time i O(n) limitacije kod trazenja
najveceg broja
najveci broj : 27


FRAME 2
najveci broj nakon sto je na svaki broj u data 
dodan 83 je : 110
110
101
83
86
88
87
89
90
91
97


FRAME 3
83
101
110
86
88
87
89
90
91
97
swap nultog i 2 index-a
najveci broj : 110 s direktnim pristupom