Я хочу определить, являются ли две последовательности «эквивалентными по порядку», где я имею в виду две последовательности: a и b - эквивалентные по порядку, если они имеют одинаковое числоэлементы, и они оба содержат менее двух чисел или, если для всех i, j, 1 <= i, j <= n, где n - длина последовательности a [i] <= a [j] тогда и только тогда, когда b [я] <= b [j] </p>
Я написал небольшую программу на C вместе с набором тестовых случаев
include <stdio.h>
int main() {
// Should be true, and is
// int a[1] = {12};
// int b[1] = {8};
// Should be true, and is
// int a[3] = {1, 2, 3};
// int b[3] = {12, 32, 43};
// Should be true, and is
// int a[3] = {12, 45, 78};
// int b[3] = {1, 2, 3};
// Should be true, and is
// int a[6] = {7, 5, 9, 13, 12};
// int b[6] = {4, 2, 25, 33, 26};
// Should be true, and is
// int a[3] = {1, 1, 1};
// int b[3] = {1, 1, 1};
// Should be false, and is
// int a[4] = {12, 1, 2, 3}; // because there is a decrease between 12 and 1
// int b[4] = {3, 4, 5, 6}; // but an increase between 3 and 4
// Should be true, but for some reason is not
int a[6] = {23, 55, 22, 33, 9, 18};
int b[6] = {21, 43, 11, 22, 7, 11};
int size_of_arrays = 6; // set this to the correct value depending on values being tested
int are_equivalent = 1;
for (int m = 0; m < size_of_arrays; m = m + 1){
for (int n = 0; n < size_of_arrays; n = n + 1){
if ((a[m] <= a[n]) != (b[m] <= b[n])){
are_equivalent = 0;
}
}
}
if (are_equivalent == 1) {
printf("The two sequences are order equivalent.");
} else {
printf("The two sequences are not order equivalent.");
}
return 0;
}
, но последний тестовый пример, в частности, бросает меня запетля (каламбур).В некоторых случаях моя логика не распространяется, но я не могу ее увидеть.Есть идеи, что я могу упустить?