Сложная задача. Помогите, пожалуйста
|
|
etc | Дата: Суббота, 15.03.2008, 18:25 | Сообщение # 1 |
Новичок
Группа: Пользователи
Сообщений: 9
Статус: Offline
| <В текстовом файле записана последовательность целых чисел. Их количество не ограничено (!). Известно, что одно из них встречается чаще, чем все остальные, вместе взятые. Вывести это число.> Числа типа longint. Число надо представить четырьмя одномерными массивами с индексами 0..255, то есть в 256-ричном виде. Затем запоминать кол-во повторений в каждом байте-массиве наиболее часто встречающейся из 256 цифр. Что дальше делать, не знаю. Если вам не тяжело, будьте добры, обьясните, пожалуйста, потому что я сам ничерта не понимаю (алгоритм подсказан учителем). Это моя лаба, скоро сдавать.
|
|
| |
Alexander | Дата: Понедельник, 17.03.2008, 23:03 | Сообщение # 2 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Я бы сделал иначе. Самый простой вариант, это хранить все числа и их количество в односвязном списке. При прочтении очередного числа, надо просмотреть список в поисках этого числа. Если найдено, то увеличиваем счётчик этого числа на единицу, а если нет, то добавляем новый элемент в начало списка. Когда весь файл будет прочитан, останится просто найти элемент списка, с максимальным счётчиком. Вот так будет выглядеть каждый элемент списка: Code Element=record Value, {сам элемент-число} N:LongInteger; {счётчик элемента} Next:POINTER; {указатель на следующий элемент} end; Это явно проще, чем твой вариант, суть которого я так и не понял. Вопросы есть?
Скажем дружно- нафиг нужно!
|
|
| |
etc | Дата: Вторник, 18.03.2008, 07:18 | Сообщение # 3 |
Новичок
Группа: Пользователи
Сообщений: 9
Статус: Offline
| Количество цифр, а значит, и их повторений, безгранично, то есть выходит за рамки типа longint. Поэтому вариант с запоминанием количества повторений каждого числа не годится. Операции над байтами - это как обязательное условие. Препод рассказал в общих чертах, как это должно выглядеть, я написал выше. Может, я неверно толкую. Кто-нибудь может решить?
|
|
| |
Alexander | Дата: Вторник, 18.03.2008, 08:09 | Сообщение # 4 |
Всевышний
Группа: Модераторы
Сообщений: 475
Статус: Offline
| Code Количество цифр, а значит, и их повторений, безгранично, то есть выходит за рамки типа longint. тогда тебе нужно писать класс, который сможет работать со сколь угодно длинными числами, ведь вообще без счётчика тебе ну никак не обойтись. И вот тебе другой вариант: Значение типа longint имеет размер 4байта=4*8=32бита. Объявляешь массив массив из 32 элементов, каждый элемент которого отвечает за 1 бит числа. Когда весь файл будет прочитан, ты из этого массива без проблем восстановишь самое часто встречающееся число т.к. Quote встречается чаще, чем все остальные, вместе взятые
Скажем дружно- нафиг нужно!
|
|
| |