Оцените решение задачи
От: Ororo1  
Дата: 15.10.14 12:29
Оценка:
Условие:
Даны 3 списка с числами. Числа в списках не повторяются. Сами списки отсортированы. Необходимо реализовать метод GetNext, который бы обходил все 3 списка и выдавал числа в порядке возрастания. Объединять списки нельзя!
Примеры списков:
[List]: 1, 5, 12, 28, 31
[List]: 6, 9, 13
[List]: 3, 7, 10, 15
Вывод в этом случае должен быть таким:
GetNext << 1;
GetNext << 3;
GetNext << 5;
GetNext << 6;
GetNext << 7;
GetNext << 9;
и т.д.

Решение:
....

vector<vector<int>*> vectors;//тут хранятся наши списки

vector<int> vec1;
vector<int> vec2;
vector<int> vec3;//сами списки

....

vectors.push_back(&vec1);
vectors.push_back(&vec2);
vectors.push_back(&vec3);

vector<int> indexes(vectors.size(),0);//тут храним индекс элемента, который последний раз брали для каждого из списков

GetNext(indexes);
....


bool isExist(vector<int> &vec, int index)
{
    return index < vec.size();
}

int GetNext( vector<int> &indexes)
{
    int min = 0;
    int index = -1;
    for(int i=0;i<vectors.size();++i)
    {
        if(isExist(*vectors.at(i),indexes.at(i)))
        {
            min = vectors.at(i)->at(indexes.at(i));
            index = i;
            break;
        }
    }
    
    if(index == -1)
        throw exception();
    
    for(int i=0;i<vectors.size();++i)
    {
        if(isExist(*vectors.at(i),indexes.at(i)))
        {
            if(vectors.at(i)->at(indexes.at(i))<min)
            {
                min = vectors.at(i)->at(indexes.at(i));
                index = i;
            }
        }
    }
    
    indexes.at(index)++;
    
    return vectors.at(index)->at(indexes.at(index)-1);
    
}
c++ задачи
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.