books. год книги хранится в books.god, страницы - books.stranic
нужно найти по 1 книге каждого года, с самым большом кол-вом страниц. можно такое как-нибудь организовать? хотя бы алгоритм подкиньте :((
если нужно, могу кинуть код функции
Можно отсортировать исходный массив объектов по году, затем в каждом годе искать макс. кол-во страниц. Стандартные алгоритмы для реализации: std::sort/std::stable_sort; std::max_element;
а если вручную, циклами? сортировку годов сделал, вопрос в поиске макс. кол-во страниц в каждом году
Можно мапку вида <год, книга с самым большим количеством страниц>
А, так сортировку сделали. В чем проблема тогда возникает?
до них мы еще не дошли :)
во 2 сортировке, уже по страницам, учитывая года
Хорошо. А на каком этапе проблема возникает?
начинаю тупить примерно тут: f = fopen("f", "rb"); while (fread(&books, siz, 1, f) == 1) { if (books.god == asd[i]) //for (m = -1; m < all - 1; m++) if (asd[m] == books.god) poj[i + 2]++; i++; } fclose(f); в asd[] хранятся года как раз
poj - это что? Я не знаю как вы собираетесь хранить книги с максимальным количеством страниц. Если вам действительно нельзя использовать мапы и не хочется руками писать какое-то отображение год -> книга, то можете примерно так сделать - создаем динамических массив "максимальных" книг. Затем проходимся по вообще всем книгам. (Книгу в исходном массиве буду помечать А, в "максимальном" массиве - В) Для каждой книги А проверяем, есть ли в массиве максимальных книг книга В, у которой год равен году книги А. Если есть, то сравниваем количество страниц и заменяем, если нужно, книгу B на книгу А. Если книги B в массиве не нашлось, то добавляем туда книгу А.
Завести массив лет, и за 1 проход заполнить его
poj это кусок старого кода, предназначался уже тут для хранения "максимальных" годов
хорошо, спасибо, буду пробовать
А, это тоже самое меня сбила фраза "помечать А"))
Там просто в противном случае получается что-то вроде "найдем книгу у которой год равен году книги"
в питоноподобном псевдокоде: all_books = [ /* представим, что тут какие-то данные есть */] max_books = [/* а этот пустой */] for book in all_books: bool found = False for max_book in max_books: if max_book.year == book.year: found = True if max_book.pages < book.pages: // нашли новую "максимальную" книгу max_book = book break if !found: max_books.add(book) // Просто добавим в массив это плохо по асимптотике, но самая "наивная" и быстрая реализация, кмк
понял, буду ориентироваться на это
Обсуждают сегодня