Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова - "Помогите", "Спасите", "Срочно"
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте >>>правила <<< и заново правильно создайте тему.
 
Опции темы
Старый 27.01.2009, 03:09   #1
pechenka.
 
Регистрация: 22.01.2009
Сообщений: 4
Сообщение Наибольшее встречающееся число

Есть программа на задание: "В одномерном массиве найти наиболее часто встречающееся число. Если таких чисел несколько, определить наименьшее из них."
В этой же программе можете найти наибольшее часто встречающееся число по аналогии с наименьшим и вывести его на экран вместе с наименьшим же?
Код:
#include <iostream>
#include <conio.h>
#include <time.h>
using namespace std;

const int n=10;
int main(){

int a[n];
int i,j,mx,mk,k;

srand(time(NULL));
for(i=1;i<=n;i++)
 {
  a[i]=rand()%n+1;
  cout.width(3);
		cout<<a[i];
	}
cout<<endl;
mx=a[1]; mk=1; k=0;
for(i=1;i<= n;i++) /*цикл в котором производим необходимые проверки для получения результата*/
 {
		for(j=1;j<=n;j++)
				if(a[i]==a[j]) k++;
if(((mk == k) && (mx > a[i])) || (mk < k)) /*выбираем меньшее из "одинаковых*/
 {
		mx=a[i]; mk=k; 
	}
k=0;
}
cout<<"mx="<<mx<<" count="<<mk<<endl; /*выводим число соответствующее условию, а также количество сколько раз это число встречается в массиве*/

getch();
return 0;
}
pechenka. вне форума
Старый 27.01.2009, 04:01   #2
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,623
По умолчанию

А может вы хоть вопрос зададите?
MaTBeu вне форума
Старый 27.01.2009, 04:56   #3
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,533
По умолчанию Вот в чём вопрос

Цитата:
Сообщение от pechenka. Посмотреть сообщение
Есть программа...
В этой же программе можете найти?..
Код:
#include <iostream>
#include <conio.h>
#include <time.h>
/*...*/
Только, если не путать буквы, то это наиболее часто встречающиеся числа.

Допустим, там есть:
5 5 5 5 25 77 1 9 1 0 32 1 32 0 1200 0 1

Тогда, очевидно, вопрос в том, можем ли мы найти (на основе уже готовой программы), что наиболее часто (здесь — 4 раза) встречаются 5 и 1.

И, если верить автору, то 1 программа находит (как наименьшее из тех, что встретились больше остальных чисел), а он хочет, чтоб она находила и 5.

Последний раз редактировалось Sasha_Smirnov; 27.01.2009 в 04:59.
Sasha_Smirnov вне форума
Старый 27.01.2009, 04:59   #4
pechenka.
 
Регистрация: 22.01.2009
Сообщений: 4
По умолчанию

В принципе, вопрос был вот такой: В этой же программе можете найти наибольшее часто встречающееся число по аналогии с наименьшим и вывести его на экран вместе с наименьшим же?
Тогда переиначу вопрос. В этой же программе найти наиболее часто встречающееся число как наибольшее, так наименьшее, и вывести их на экран. Теперь вроде понятно
pechenka. вне форума
Старый 27.01.2009, 13:46   #5
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,623
По умолчанию

Все наиболее встречающиеся числа по-очереди в массив закидывать, потом находить наименьшее в массиве. Вывести его первым. А затем весь массив.
MaTBeu вне форума
Старый 27.01.2009, 21:49   #6
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,533
По умолчанию Мы не можем: Си не маем

MaTBeu! Вопрос не в этом. Кому это весь массив надо выводить... Там же (при первом проходе) будут все числа. Поскольку любое 1 раз встреченное число может к концу прохода стать лидером.

Лучше сначала массив отсортировать. Тогда за один проход найдём (если есть) оба наиболее часто встечающихся числа.
Sasha_Smirnov вне форума
Старый 27.01.2009, 22:11   #7
MaTBeu
Eclipse Foundation
Старожил
 
Аватар для MaTBeu
 
Регистрация: 19.09.2007
Сообщений: 2,623
По умолчанию

А если таких чисел будет 3 или больше? Можете вообще структуру сделать - элемент массива и количество повторений в массиве. Хотя не думаю, что такой метод вам подойдет. Но я бы сделал так.
MaTBeu вне форума
Старый 27.01.2009, 23:23   #8
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,533
По умолчанию

О бог ты мой, их два! Одно — минимальное, второе (про которое собственно вопрос) — максимальное. Не надо тут структуру.

Код:
1. Сортируем по возрастанию.
2. Включаем 2 счётчика: для наименьшего (a) и наибольшего (b).
3. Читаем первый элемент.

	4. Цикл.
	Пока не конец, читаем следующий.
		Притом: когда счётчик (для нового — то есть бОльшего, из-за 	упрядоченности) значеня превысил предыдущее значение или дал тот же 	результат — запоминаем этот элемент (и его частоту появления), причём старый 	(предыдущий) — тоже храним.
	Конец цикла.

5. Выводим последнее значение счётчика (b) и (внимание!) предпоследнее (a).
Вот мы и получили 2 наиболее часто встречающихся элемента массива (или 1 — если они совпали):
a) меньший (давший предпоследнее значение счётчика);
b) больший (давший последнее значение счётчика).

Или я не прав?

Последний раз редактировалось Sasha_Smirnov; 28.01.2009 в 23:23.
Sasha_Smirnov вне форума
Старый 28.01.2009, 02:25   #9
Pendulum
 
Регистрация: 15.01.2008
Сообщений: 4
По умолчанию

Не совсем к решению задачи, а замечание по преведенному коду.
Элементы массива в С нумеруются с 0!

Цитата:
Код:
for(i=1;i<=n;i++)
 {
  a[i]=rand()%n+1;

Последний раз редактировалось Pendulum; 28.01.2009 в 02:38.
Pendulum вне форума
Старый 28.01.2009, 16:55   #10
pechenka.
 
Регистрация: 22.01.2009
Сообщений: 4
По умолчанию

Так и есть.
pechenka. вне форума
Закрытая тема
Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal: Наиболее часто встречающееся число в массиве. MaGWaY_minsk Помощь студентам 2 20.01.2010 01:22
Найти на отрезке [n, 2n] натуральное число, имеющее наибольшее количество делителей. APTEMUC Паскаль, Turbo Pascal, PascalABC.NET 2 10.12.2008 06:20
Вывести на экран матрицу, в которой наибольшее число нулевых строк Александр НИК-В Паскаль, Turbo Pascal, PascalABC.NET 0 05.12.2008 21:49
Определить радиус и центр окружности на которой лежит наибольшее число точек. Zoratul Помощь студентам 2 11.01.2008 17:00
Из двух натуральных чисел, составить наибольшее число, сохраняя первоначальную последовательность.Паскаль Omedus Помощь студентам 8 19.11.2007 23:02