Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 142

 
Artyom Trishkin:

Nope :)))

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

é o número de números da mesma cor.

Alexey Kozitsyn quis dizer: em uma matriz ordenada.Número máximo de valores idênticos em uma seqüência?

 
Mislaid:
Array:

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

Classificação:
1,1,1,1,1, 1,2, 2, 3,3,4,4,4,5

A saída são 4 valores correspondentes de números (o número 5 em uma única instância não é um valor correspondente)

 
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,4,5

A saída são 4 valores correspondentes de números (o número 5 em uma única cópia não corresponde a nada)

Isto se leria então de forma aproximada: determinar o número de números na seqüência que tem duplicatas.
 
Alexey Kozitsyn:
Então soaria algo como: determinar o número de números em uma seqüência que tem duplicatas.
Talvez. Não se trata do texto no momento, mas sim da solução. Estou aqui sentado, resolvendo...
 
Artyom Trishkin:

Nenhum dos dois.

Existem quatro números desconhecidos conhecidos. Você precisa encontrar o número de números repetidos, como no exemplo do meu primeiro posto.

Se a ordem não for importante, os números são inteiros e o intervalo é conhecido, então você pode contar para O(tamanho) simplesmente criando um conjunto 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]);

Caso contrário, realmente separe e a partir daí selecione a seqüência mais longa de números idênticos.
 
Maxim Kuznetsov:

Se a ordem não for importante, os números são inteiros e o intervalo é conhecido, então é possível contar para O(tamanho) simplesmente criando um conjunto 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]);

Caso contrário, na verdade - ordenar e a partir daí selecionar a seqüência mais longa de idênticos.
Portanto, "de outra forma" é um conjunto de números de qualquer tipo. Portanto, é uma função modelo. Bem e ordenar e pesquisar.
No entanto, estou fazendo isso lentamente.
 
Artyom Trishkin:
Talvez. Não se trata do texto no momento, mas sim da solução. Estou aqui sentado a resolver...
É esquisito.
 
fxsaber:
Isso é estranho.
Sua opção sempre dá 1. Leva mais tempo para descobrir do que para criar o seu próprio. Isso é toda a estranheza ;)
 
Artyom Trishkin:
Sua opção sempre dá 1. Leva mais tempo para descobrir do que para criar o seu próprio. Isso é toda a estranheza ;)
Executando-o como ele é.
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 também parece ser:

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ão: