Advertisement
DPOH-VAR

Untitled

Jul 3rd, 2020
1,186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.47 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. struct ChainData {
  6.     int pos = -1;
  7.     int len = 0;
  8. };
  9.  
  10.  
  11. ChainData findMaxChain(int array[], int length);
  12. int TEST();
  13.  
  14. int main()
  15. {
  16.   // Тест  
  17.   int testResult = TEST(); if (testResult > 0) return testResult;
  18.    
  19.   int chain[15] = {0,0,0, 1,1,1, 3, 5,5,5,5,5, 6,6,6};
  20.   ChainData data = findMaxChain(chain, sizeof chain / sizeof *chain);
  21.   cout << "Chain length: " << data.len << "; Chain position: " << data.pos;
  22. }
  23.  
  24. ChainData findMaxChain(int array[], int length){
  25.     if (length <= 0) {
  26.         ChainData empty {};
  27.         return empty;
  28.     }
  29.     ChainData maxChain {}; // самая длинная цепочка
  30.     maxChain.pos = 0;
  31.     maxChain.len = 0;
  32.    
  33.     int chainLen = 0;
  34.     int chainVal = array[0];
  35.    
  36.     for (int i=0; i<length; i++) {
  37.         int v = array[i];
  38.         if (v == chainVal) { // если цепочка продолжается
  39.             chainLen++; // увеличиваем счетчик длины цепочки на 1
  40.             continue;
  41.         } else { // если цепочка прервалась
  42.             if (maxChain.len < chainLen){ // если эта цепочка самая длинная
  43.                 maxChain.len = chainLen;
  44.                 maxChain.pos = i - chainLen;
  45.             }
  46.             // обновляем данные текущей цепочки
  47.             chainVal = v;
  48.             chainLen = 1;
  49.         }
  50.     }
  51.     // в конце прохода по массиву может быть наибольшая длина текущей цепочки
  52.     if (maxChain.len < chainLen){ // если эта цепочка самая длинная
  53.         maxChain.len = chainLen;
  54.         maxChain.pos = length - chainLen;
  55.        
  56.     }
  57.     return maxChain; // вернем самую длинную цепочку
  58. }
  59.  
  60. int TEST(){
  61.     int chain1[15] = {0,0,0, 1,1,1, 3, 5,5,5,5,5, 6,6,6};
  62.     ChainData data1 = findMaxChain(chain1, sizeof chain1 / sizeof *chain1);
  63.     if (data1.pos != 7) return 1;
  64.     if (data1.len != 5) return 2;
  65.    
  66.     int chain2[0] = {};
  67.     ChainData data2 = findMaxChain(chain2, sizeof chain2 / sizeof *chain2);
  68.     if (data2.pos != -1) return 3;
  69.     if (data2.len != 0) return 4;
  70.    
  71.     int chain3[5] = {1,1,1,1,1};
  72.     ChainData data3 = findMaxChain(chain3, sizeof chain3 / sizeof *chain3);
  73.     if (data3.pos != 0) return 5;
  74.     if (data3.len != 5) return 6;
  75.    
  76.     return 0;
  77. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement