Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 142

 
Artyom Trishkin:

Non :))))

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

est le nombre de numéros de la même couleur.

Alexey Kozitsyn voulait dire : dans un tableau trié.Nombre maximum de valeurs identiques dans une séquence ?

 
Mislaid:
Array :

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

Triage :
1,1,1,1, 1,2, 2, 3,3,4,4,5

Le résultat est 4 valeurs correspondantes de nombres (le nombre 5 dans une seule copie n'est pas une valeur correspondante).

 
Artyom Trishkin:
Array :

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

Trier par :
1,1,1, 1,2, 2, 3,3,4,4,5

Le résultat est 4 valeurs de nombres correspondants (le nombre 5 dans une seule copie ne correspond à rien).

On pourrait alors lire à peu près ceci : déterminer le nombre de nombres de la séquence qui ont des doublons.
 
Alexey Kozitsyn:
Cela ressemblerait alors à quelque chose comme : déterminer le nombre de nombres dans une séquence qui ont des doublons.
Peut-être. Il ne s'agit pas de la formulation pour le moment, mais de la solution. Je suis assis ici, en train de résoudre...
 
Artyom Trishkin:

Ni l'un ni l'autre.

Il y a quatre numéros inconnus connus. Vous devez trouver le nombre de chiffres répétés comme dans l'exemple de mon premier message.

Si l'ordre n'est pas important, que les nombres sont des entiers et que l'intervalle est connu, alors vous pouvez compter pour O(taille) simplement en créant un tableau de compteurs.

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

Sinon, faites un véritable tri et, à partir de là, sélectionnez la plus longue séquence de numéros identiques.
 
Maxim Kuznetsov:

Si l'ordre n'a pas d'importance, que les nombres sont des entiers et que l'intervalle est connu, alors vous pouvez calculer pour O(taille) simplement en créant un tableau de compteurs.

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

Sinon, vraiment - trier et à partir de là, sélectionner la plus longue séquence d'identiques.
Donc "autrement" est un tableau de nombres de n'importe quel type. Il s'agit donc d'une fonction de modèle. Bien et trier et chercher.
Cependant, je le fais lentement.
 
Artyom Trishkin:
Peut-être. Il ne s'agit pas de la formulation pour le moment, mais de la solution. Je suis assis ici, en train de résoudre...
C'est bizarre.
 
fxsaber:
Étrange.
Votre option donne toujours 1. Il faut plus de temps pour le comprendre que pour l'inventer. C'est toute la bizarrerie ;)
 
Artyom Trishkin:
Votre option donne toujours 1. Il faut plus de temps pour le comprendre que pour l'inventer. C'est toute la bizarrerie ;)
Le faire fonctionner tel qu'il est.
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));
}
Ça marche.
 

Celui-ci semble l'être aussi :

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*/); // число|количество
}