Дано два массива А и В целых чисел. Вычислить одномерный массив С, который содержит элементы массива А в одном экземпляре, которые присутствуют в массиве В.
Заранее спасибо.
klem4
16.10.2007 0:26
Что вызывает затруднение ? Алгоритм или реализация ?
Дмитрий
16.10.2007 2:05
Реализация, алгоритм в принципе понятен. Я с С++ не дружу. Алгоритм мне видится таким: Выбираем i элемент массива А. Проверяем все элементы (кроме i) на совпадение с i. Если по результату просмотра kol=0, тогда просматриваем массив В, если kol2 = 1, то c[d]:=a[i]; d:=d+1;
Код что-то типа такого, писал из головы, на работоспасобность не проверял. Нужно тоже самое в С++.
Код
for i:=1 to n do begin kol:=0; for j:=1 to m do begin if (i<>j) and (a[i]=a[j]) then kol:=kol+1; end; if (kol=0) then begin kol2:=0; for (k:=1) to t do begin if (a[i]=b[k]) then kol2:=kol2+1; end; if kol2:=1 then begin c[d]:=a[i]; d:=d+1; end; end; end;
klem4
16.10.2007 16:31
мне кажется ты (или я) не совсем верно понял задание
мой вариант таков:
идем по массиву A, берем очередной элемент A[i] просматриваем массив С, если в нем нету элемента равного A[i], то просматриваем массив B, если в нем есть элемент равный A[i], то добавляем A[i] в C
Дмитрий
16.10.2007 18:38
Хмм... Мне кажется задание таково: Берем очередной элемент массива А, если он единственный в массиве А, то смотрим массив В, если элемент А[i] есть в В, то добавляем в С.
volvo
16.10.2007 18:56
Дмитрий, уточняй задание... Здесь неоднозначность:
Цитата
Вычислить одномерный массив С, который содержит элементы массива А в одном экземпляре, которые присутствуют в массиве В.
Выделенный текст куда относится? Можно прочесть так, как сказал ты, но можно - так, как сказал klem4...
Так что надо точно узнать, искать ли единственные экземпляры массива A, и сохранять их в C (если они есть в B), или брать любые элементы массива A, и сохранять их в С в единственном экземпляре... Это - разные вещи:
A = (1, 2, 3, 1, 4, 5) B = (1, 2, 3) C будет равно (2, 3) по первому варианту, или (1, 2, 3) по второму...
Дмитрий
16.10.2007 22:06
В массиве А у нас содержится элемент в 1м экземпляре. Проверяем, есть ли он в В, если есть, то заносим в С (первый вариант из тех что Вы предложили). A = (1, 2, 3, 1, 4, 5) B = (1, 2, 3)
С=(2,3)
Дмитрий
17.10.2007 21:39
Помогите пожалуйста, мне завтра уже сдавать.
Дмитрий
17.10.2007 22:28
Сделал вот такое, но оно не работает =((( Выводит фигню какую-то.
#include <iostream.h> #include <conio.h> void main() { clrscr(); int d,t,i,j,k,n,m,f,a[10],b[10],kol,c[10],kol2; cout << "Enter length A:"; cin >> n; for (i=0;i<=(n-1);i++) { cout << (i+1) << ':'; cin >> a[i]; } cout << "Enter length B:"; cin >> m; for (j=0;j<=(m-1);j++) { cout << (j+1) << ':'; cin >> b[j]; } f=0; for (k=0;k<=(n-1);k++) { kol=0; for (d=0;d<=(n-1);d++) { if (a[k]=a[d]) { if (k!=d) { kol=kol+1; } } } kol2=0; if (kol=0) { for (t=0;t<=(m-1);t++) { if (a[k]=b[t]) { kol2=kol2+1; } } if (kol2=1) { c[f]=a[k]; f++; }
} } for (i=0;i<=m;i++) { cout << c[i]; }
}
volvo
17.10.2007 23:01
#include <iostream>
int main() { const int size_a = 6; const int size_b = 3; int a[size_a] = {1, 2, 3, 1, 4, 5}; int b[size_b] = {1, 2, 3};
int c[size_a], size_c = 0;
for(int i = 0; i < size_a; ++i) { int count = 0; for(int j = 0; j < size_a; ++j) count += (a[i] == a[j]) ? 1 : 0;
for(int i = 0; i < size_c; ++i) std::cout << c[i] << " "; std::cout << std::endl; return 0; }
Дмитрий
17.10.2007 23:07
Спасибо. А это под какой С++? У меня в борланде не делается...
volvo
17.10.2007 23:11
Это под GCC... Какой Borland у тебя? У меня из борландов есть только Builder (я думаю, программа должна пойти без изменений), и досовский Turbo C 3.0
Дмитрий
17.10.2007 23:14
У меня Borland C++ 3.1. Досовский еще. Программа работает в Visual C++ . Попробую экзешник показать, под "дурочку" закосить. Огромное спасибо за помощь =)
volvo
17.10.2007 23:18
Для досовского компилятора надо немного подправить:
Дмитрий
17.10.2007 23:31
Огромное спасибо =)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.