Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 142
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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 ?
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).
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).
Cela ressemblerait alors à quelque chose comme : déterminer le nombre de nombres dans une séquence qui ont des doublons.
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]);
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]);
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...
Étrange.
Votre option donne toujours 1. Il faut plus de temps pour le comprendre que pour l'inventer. C'est toute la bizarrerie ;)
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));
}
Celui-ci semble l'être aussi :
{
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*/); // число|количество
}