Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 142

 
Artyom Trishkin:

No :)))

1,1,1,2,3,3,2,1,4,4,5

es el número de números del mismo color.

Alexey Kozitsyn quiso decir: en una matriz ordenada.¿Número máximo de valores idénticos en una secuencia?

 
Mislaid:
Array:

1,1,1,2,3,3,2,1,4,4,5

Clasificación:
1,1,1,1, 1,2, 2, 3,3,4,4,5

El resultado son 4 valores coincidentes de números (el número 5 en una sola copia no es un valor coincidente)

 
Artyom Trishkin:
Array:

1,1,1,2,3,3,2,1,4,4,5

Ordenar por:
1,1,1, 1,2, 2, 3,3,4,4,5

La salida son 4 valores de números que coinciden (el número 5 en una sola copia no coincide con nada)

Así, se diría: determinar el número de números de la secuencia que tienen duplicados.
 
Alexey Kozitsyn:
Entonces sonaría algo así como: determinar el número de números de una secuencia que tienen duplicados.
Tal vez. En este momento no se trata de la redacción, sino de la solución. Estoy sentado aquí, resolviendo...
 
Artyom Trishkin:

Tampoco.

Hay cuatro números desconocidos conocidos. Tienes que encontrar el número de números repetidos como en el ejemplo de mi primer post.

Si el orden no es importante, los números son enteros y el rango es conocido, entonces se puede contar para O(size) simplemente creando una matriz de contadores.

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]);

En caso contrario, ordena realmente y a partir de ahí selecciona la secuencia más larga de números idénticos.
 
Maxim Kuznetsov:

Si el orden no es importante, los números son enteros y el rango es conocido, entonces se puede calcular para O(size) simplemente creando una matriz de contadores.

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]);

De lo contrario, realmente - ordenar y desde allí seleccionar la secuencia más larga de idénticos.
Así que "si no" es una matriz de números de cualquier tipo. Así que es una función de plantilla. Bueno y ordenar y buscar.
Sin embargo, lo estoy haciendo lentamente.
 
Artyom Trishkin:
Tal vez. En este momento no se trata de la redacción, sino de la solución. Estoy sentado aquí resolviendo...
Es raro.
 
fxsaber:
Qué raro.
Su opción siempre da 1. Se tarda más en averiguar que en idear una propia. Esa es toda la rareza ;)
 
Artyom Trishkin:
Su opción siempre da 1. Se tarda más en averiguar que en idear una propia. Esa es toda la rareza ;)
Dirigirlo tal y como es.
template <typename T>
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));
}
Funciona.
 

Este también parece serlo:

void OnTick()
{
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*/); // число|количество
}
Razón de la queja: