Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- using namespace std;
- struct ChainData {
- int pos = -1;
- int len = 0;
- };
- ChainData findMaxChain(int array[], int length);
- int TEST();
- int main()
- {
- // Тест
- int testResult = TEST(); if (testResult > 0) return testResult;
- int chain[15] = {0,0,0, 1,1,1, 3, 5,5,5,5,5, 6,6,6};
- ChainData data = findMaxChain(chain, sizeof chain / sizeof *chain);
- cout << "Chain length: " << data.len << "; Chain position: " << data.pos;
- }
- ChainData findMaxChain(int array[], int length){
- if (length <= 0) {
- ChainData empty {};
- return empty;
- }
- ChainData maxChain {}; // самая длинная цепочка
- maxChain.pos = 0;
- maxChain.len = 0;
- int chainLen = 0;
- int chainVal = array[0];
- for (int i=0; i<length; i++) {
- int v = array[i];
- if (v == chainVal) { // если цепочка продолжается
- chainLen++; // увеличиваем счетчик длины цепочки на 1
- continue;
- } else { // если цепочка прервалась
- if (maxChain.len < chainLen){ // если эта цепочка самая длинная
- maxChain.len = chainLen;
- maxChain.pos = i - chainLen;
- }
- // обновляем данные текущей цепочки
- chainVal = v;
- chainLen = 1;
- }
- }
- // в конце прохода по массиву может быть наибольшая длина текущей цепочки
- if (maxChain.len < chainLen){ // если эта цепочка самая длинная
- maxChain.len = chainLen;
- maxChain.pos = length - chainLen;
- }
- return maxChain; // вернем самую длинную цепочку
- }
- int TEST(){
- int chain1[15] = {0,0,0, 1,1,1, 3, 5,5,5,5,5, 6,6,6};
- ChainData data1 = findMaxChain(chain1, sizeof chain1 / sizeof *chain1);
- if (data1.pos != 7) return 1;
- if (data1.len != 5) return 2;
- int chain2[0] = {};
- ChainData data2 = findMaxChain(chain2, sizeof chain2 / sizeof *chain2);
- if (data2.pos != -1) return 3;
- if (data2.len != 0) return 4;
- int chain3[5] = {1,1,1,1,1};
- ChainData data3 = findMaxChain(chain3, sizeof chain3 / sizeof *chain3);
- if (data3.pos != 0) return 5;
- if (data3.len != 5) return 6;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement