2017-09-08 2 views
-3

L'objectif principal ici est de voir si deux séquences de chiffres sont dans l'ordre de correspondance ou non. Par exemple .., 8 7 4 5 1 2 et 80 70 40 50 10 12 sont dans l'ordre de correspondance, alors que 1 2 3 4 5 et 9 8 7 6 5 ne sont pas dans l'ordre correspondant.Contrôle d'équivalence de commande

Alors, voici le code. Pour simplifier, j'ai supposé que la longueur des deux séquences était la même. Ma condition if trouve l'équivalence d'ordre correctement sauf dans les séquences où il y a deux nombres identiques. Par exemple, 1 2 2 et 2 2 1 ne sont pas dans l'ordre équivalent mais ils le montrent comme équivalent. C'est le bug principal que je veux corriger. Si quelqu'un pouvait m'aider avec ce si-condition, ce serait génial.

+0

Êtes-vous sûr que le> = et <= sont corrects? C'est ce qui cause le bug 1 2 2 et 2 2 1 – Tyler

+0

Est-ce que '1223' et' 1234' devraient être équivalents? – Jarod42

+0

Ouais, s'il n'y a pas les mêmes éléments consécutifs, ça marche. Disons pour les deux premiers éléments, ((8 <= 6) && (80 <= 60)) || ((8> = 6) && (80> = 60)), la deuxième partie après || correspond à true rendant l'ensemble if-statement vrai. –

Répondre

0

D'après ce que je comprends, vous voulez quelque chose comme:

int is_equivalency(const int* arr1, const int* arr2, int size) 
{ 
    for (int i = 0; i + 1 < size; ++i) { 
     int j = i + 1; 

     if ((arr1[i] == arr1[j] && arr2[i] != arr2[j]) 
      || (arr1[i] < arr1[j] && arr2[i] >= arr2[j]) 
      || (arr1[i] > arr1[j] && arr2[i] <= arr2[j])) 
     { 
      return 0; 
     } 
    } 
    return 1; 
} 

Demo