Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 142
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Не-а :)))
1,1,1,2,3,3,2,1,4,4,5
количество чисел одинакового цвета.
Alexey Kozitsyn имел в виду: в отсортированном массиве. Максимальное количество одинаковых значений в последовательности?
1,1,1,2,3,3,2,1,4,4,5
Сортируем:
1,1,1,1,2,2,3,3,4,4,5
Получаем на выходе 4 совпадающих значения чисел (число 5 в единичном экземпляре - это не совпадающее ни с чем значение)
Массив:
1,1,1,2,3,3,2,1,4,4,5
Сортируем:
1,1,1,1,2,2,3,3,4,4,5
Получаем на выходе 4 совпадающих значения чисел (число 5 в единичном экземпляре - это не совпадающее ни с чем значение)
Тогда это будет звучать примерно: определить количество чисел в последовательности, имеющих дубли.
Ни то, ни другое.
Есть четыре заведомо неизвестных числа. Нужно найти количество повторяющихся чисел как в примере в моём первом сообщении.
если порядок неважен, числа целые и диапазон известен, то можно посчитать за O(size) просто заведя массив счётчиков.
ArrayResize(counter,100);
ArrayInitialize(counter,0);
for(int i=ArraySize(source)-1;i>=0;i--) {
counter[source[i]]++;
}
int pos=ArrayMaximum(counter);
PrintFormat("Чаще всего встречалось число %d, аж %d раз",pos,source[pos]);
если порядок неважен, числа целые и диапазон известен, то можно посчитать за O(size) просто заведя массив счётчиков.
ArrayResize(counter,100);
ArrayInitialize(counter,0);
for(int i=ArraySize(source)-1;i>=0;i--) {
counter[source[i]]++;
}
int pos=ArrayMaximum(counter);
PrintFormat("Чаще всего встречалось число %d, аж %d раз",pos,source[pos]);
Может быть. Дело не в формулировке в данный момент, а в решении. Сижу, решаю...
Странно.
Ваш вариант всегда выдаёт 1. Разбираться дольше, чем своё придумать. Вот и все странности ;)
int Strange( const T &InArray[] )
{
int Res = 1;
T Array[];
const int Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && ArraySort(Array))
{
int Tmp = 1;
ArrayPrint(Array);
for (int i = 1; i < Size; i++)
{
if (Array[i - 1] != Array[i])
{
if (Tmp > Res)
Res = Tmp;
Tmp = 0;
}
Tmp++;
}
}
return(Res);
}
void OnStart()
{
int Array[] = {1, 2, 3, 1, 2, 1, 2, 2};
Print(Strange(Array));
}
Этот вроде тоже:
{
int Arr[]={1, 2, 4, 4, 2, 1, 2, 2, 1, 4, 1, 4, 3, 3, 3, 4, 3, 3, 1, 3, 4, 3, 3};
Comment( GetM(Arr) );
}
int GetM(int &Mas[])
{
int c=0,cd=0,res=-1;
ArraySort(Mas);
int ArrSize= ArraySize(Mas);
for(int i=0; i<ArrSize; i++) {
for(int x=i; x<ArrSize; x++) {
if(Mas[i]==Mas[ArrayMinimum(Mas,WHOLE_ARRAY,x)]) c++;
}
if(c>=cd) { // ищем первое большее ">" или максимально большее ">=" при одинаковом количестве
cd=c; // количество совпадений
res=Mas[i]; // число
}
c=0;
}
return( res /*cd*/); // число|количество
}