У меня есть код C, который я хочу изменить очень просто.C: печатать только не общие элементы в 2 массивах
Скажем, у меня есть два массива, как этот
int v1[5] = {1, 3, 7, 13, 10};
int v2[2] = {1, 10};
И я хотел бы, чтобы напечатать не общие элементы (разность), как:
3, 7, 13
Вот моя попытка, которая не является еще достаточно :
#include <stdio.h>
int main()
{
int v1[5] = { 1, 3, 7, 13, 10 };
int v2[2] = { 1, 10 };
for (int i = 0; i < sizeof(v1)/(sizeof * v1); i++) {
for (int j = 0; j < sizeof(v2)/(sizeof * v2); j++) {
if (v1[i] != v2[j]) {
printf("%d ", v1[i]);
break;
} else {
break;
}
}
}
return 0;
}
Два массива всегда будут очень короткими (не более 6 элементов). Thery не упорядочены, и я не должен их изменять. Элементы в каждом из них уникальны, каждый номер может появляться только один раз в каждом массиве. v2 будет содержать только подмножество элемента из v1. Что было бы самым эффективным способом достижения этого?
В начале, для чего 'break' заявление, если) {} Else {} оператора (? Вы все равно выполняете это. Вам нужно переконфигурировать цикл, 'break' совершенно ошибочен. – nopasara
В качестве второй оптимизации возьмите 'sizeof (v1)/(sizeof * v1)' и аналогичный оператор for(): он выполняет каждый цикл и является постоянным. – nopasara
@nopasara: выражения 'sizeof' оцениваются во время компиляции и складываются, так что программа видит 2 и 5. Однако ваши советы были бы полезны при вызове' strlen' в циклах по строкам. –