Задача: Даны 2 массива a и б. Определить какой эл-т массива б чаще вст

  • Автор темы Christushka
  • Дата начала
C

Christushka

Гость
#1
Даны массивы А и В, с размерностью N. Определить, какой элемент массива В чаще всего встречается в А.
 
D

Dash

Гость
#2
Вариантов много. Один из них:

Создаёшь две вспомогательные переменные:
1. индекс текущего максимально повторяющегося элемента массива B;
2. количество повторов этого элемента (инициализированное значением 0).

Запускаешь цикл по перебору элементов массива B. Внутри этого цикла запускаешь вложенный цикл по перебору элементов массива A, в котором подсчитываешь количество вхождений элемента B в массив A. По окончанию вложенного цикла сравниваешь полученное количество со значением вспомогательной переменной №2. Если оно больше, то заменяешь значения вспомогательных переменных на текущие.
По окончанию перебора элементов массива B получишь реальные индекс наиболее часто повторяющегося элемента и количество его повторов.
 

BashOrgRu

Well-Known Member
15.03.2009
77
0
#3
Либо завести массив C размерностью N и значением C будет кол-во раз B находится в A. Затем просто пробежать по этому массивы и найти максимальные элемент с индеком j и вывести B[j].
 

BashOrgRu

Well-Known Member
15.03.2009
77
0
#4
C++:
#include <stdio.h>
#include <stdlib.h>

int main()
{
const N=4;
int a[N],b[N],c[N];
int i,j,OfftenlyIndex=0,OfftenlyEl;
/*Читам массив*/
printf("A:\n");
for (i=0;i<N;i++) scanf("%d",&a[i]);
printf("B:\n");
for (i=0;i<N;i++) scanf("%d",&b[i]);

for (i=0;i<N;i++) c[i]=0; //Обнуляем массив c
for (i=0;i<N;i++)
for (j=0;j<N;j++) if (a[i]==b[j]) c[j]++;//Пробегаем по массиву a и считаем кол-во совпадений a[i] с b[j]
OfftenlyEl=c[0];
for (i=0;i<N;i++) if (OfftenlyEl<c[i]){ //Ищем максимальный из c
OfftenlyIndex=i;
OfftenlyEl=c[i];
}
printf("Чаще всего встречается элемент b[%d]=%d",(OfftenlyIndex+1),b[OfftenlyIndex]);
return 0;
}
 

DarkKnight

Well-Known Member
01.08.2010
653
0
#5
2Christushka : Уважаемый автор данная тема более на актуальна? Вы получили ответы на все вопросы?
 
R

Rififi

Гость
#6
C++:
#include <map>
#include <iostream>

#include <boost/spirit/home/phoenix.hpp>
namespace phx = boost::phoenix;

#include <boost/range/algorithm.hpp>
#include <boost/range/adaptors.hpp>

using namespace boost::adaptors;
using phx::arg_names::arg1;

/*
Даны массивы А и В, с размерностью N. Определить, какой элемент массива В чаще всего встречается в А. 
*/

template <typename T, size_t N>
T find_most_frequent(const T (&A)[N], const T (&B)[N])
{
T tmp[N];
boost::copy(B, tmp);
boost::sort(tmp);	
T* end = std::unique(tmp, tmp+N);

std::map<T, size_t> m;
std::for_each(tmp, end, phx::ref(m)[arg1] = phx::count(phx::cref(A), arg1));

return boost::max_element(m | map_values).base()->first;
}

int main()
{
const int A[10] = {1,2,2,3,3,4,4,7,2,9};
const int B[10] = {0,1,5,6,7,1,2,-1,2};

const int most = find_most_frequent(A, B);
// наиболее частый элемент == 2, встречается 3 раза

std::cout << most << std::endl;

return 0;
}
 

DarkKnight

Well-Known Member
01.08.2010
653
0
#7
Rififi, Хочу сказать что ваши познания в STL и Boost поражают..... (я говорю про все ваших 4 сообщения)...
Но зачем использовать их в столь тривиальных задачах, которые в первую очередь основанны на стандартах C...
Или вы просто ищите практическое применения, столь мощному механизму как STL (ну и Boost - как его дополнение)...

P.S. Ручаюсь... 95% процентов этого подфорума, даже близко не представляют работу вашего кода...