Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.68
TheWitcher
1 / 1 / 0
Регистрация: 30.09.2010
Сообщений: 23
#1

Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. - C++

09.11.2011, 23:39. Просмотров 3016. Ответов 8
Метки нет (Все метки)

Задано два массива. Найти наименьшие среди элементов первого массива, которые не входят во второй массив.
Ни как не могу придумать, помогите пожалуйста.

вот что смог, программа немного не даработана
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
main()
{
int arraySize;
 
char a[100], b[100], c[5]={0,0,0,0,0};
int m,n,u,k,j,min,hold,h,t;
u=0;
 
{
    cout << "kolichestva elementov-?"; cin>>n;
    cout << "Pervii massiv" << endl;
for(k=0;k<n;k++)
    cin>>a[k];
 j=0;
 min=a[j];
    cout<<"\n kolichestva elementov2-?"; cin>>arraySize;
    cout << "Btoroi massiv" << endl;
for (j=0;j<arraySize;j++)
    cin>>b[j];
}
cout << "Pervii massiv" << endl;
for (n=0; n<k; n++)
cout << setw(4) << a[n];
cout << endl;
 
cout << "Btoroi massiv" << endl;
for (int i=0; i<arraySize; i++)
cout << setw(4) << b[i];
 
for (int pass=1; pass<arraySize; pass++)
 
for (int i=0; i < arraySize-1;i++)
 
if (b[i] > b[i+1]) {
    hold=b[i];
    b[i]=b[i+1];
    b[i+1]=hold;
}
cout << endl << "Sarturovka" << endl;
for (i=0;i<arraySize;i++)
cout << setw(4) << b[i];
cout << endl;
getch ();
{
cout << "Men'shii massiv";
for (t=0;t<arraySize;t++)
        {
                if (a[t]<b[u]) cout << setw(4) << a[t];
                }
    }        
cout << endl;   
        getch ();
return 0; 
}

вот ещё второй вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream.h>
#include <conio.h>
void main()
{
int mas_1[100], mas_2[100];
int size_mas_1, size_mas_2;
 
cout << "size_mas_1-?"; cin >> size_mas_1;
for(int i=0; i<size_mas_1; i++)
cin>>mas_1[i];
 
cout<<"\n size_mas_2-?"; cin>>size_mas_2;
for (i=0; i<size_mas_2; i++)
cin>>mas_2[i];
 
/*пузырьковая сортировка по убыванию*/
for (i=0; i<size_mas_1-1; ++i){
        int tmp = 0;
        for (int j=(i+1); j<size_mas_1; ++j)
            if (mas_1[i]<mas_1[j]) {
                tmp = mas_1[i];
                mas_1[i] = mas_1[j];
                mas_1[j] = tmp;        
            }
    }
 
//массив mas_1 отсортирован по убыванию, будем двигаться по этому массиву в конец
//и сверять текущий элемент данного массива с каждым элементом массива mas_2
//если текущий элемент массива mas_1 не найден в массиве mas_2, то 
//min_elem присвоим текущий элемент
//в конце min_elem будет содержать мин элемент mas_1, не входящий в mas_2
int min_elem = -1000; //признак , что элемента нету
 
for(i=0; i<size_mas_1; i++){
   bool is_find = false;
   
   for (int j=0; j<size_mas_2; j++){
        if (mas_1[i] == mas_2[j]){
           is_find = true;
           break;          
        }
    }
    
    if (not is_find!){
        min_elem = mas_1[i];
    }
}
 
if (min_elem == -1000)
{
    cout << "element ne naiden!" << endl;
   } else {
     cout << "min_elem= " << min_elem << endl;
    }
 
 
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2011, 23:39     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив.
Посмотрите здесь:
Найти наименьшие среди элементов первого массива, которые не входят во второй массив C++
C++ Найти наименьшие среди элементов первого массива, которые не входят во второй
C++ Найти минимальный из элементов первого массива, которые не входят во второй массив
C++ Записать в третий массив все четные элементы первого массива, которые не входят во второй массив Исправить код
Заполнить одномерный вещественный массив случайными числами; найти такие из них, которые входят в интервал C++
C++ Описать класс Массив, найти массив, состоящий из элементов первого и второго массива
C++ Одномерный массив. Найти номер первого из элементов, который меньше данное число k
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bretba
63 / 58 / 5
Регистрация: 24.07.2011
Сообщений: 343
09.11.2011, 23:46     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. #2
Я не очень понял задачу.Может нужно найти минимальный элемент первого массива,который не входит во второй массив?
TheWitcher
1 / 1 / 0
Регистрация: 30.09.2010
Сообщений: 23
09.11.2011, 23:50  [ТС]     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. #3
Цитата Сообщение от bretba Посмотреть сообщение
Я не очень понял задачу.Может нужно найти минимальный элемент первого массива,который не входит во второй массив?
Всё верно.
bretba
63 / 58 / 5
Регистрация: 24.07.2011
Сообщений: 343
10.11.2011, 00:38     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. #4
завтра сделаю,если никто не переобгонит
amor1k
Студент
147 / 147 / 24
Регистрация: 18.01.2011
Сообщений: 469
10.11.2011, 00:48     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. #5
попробуем

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int main()
{
    int a[10], b[10];
    cout << "first massive:\n ";
    for(int i = 0; i < 10; i++)
        cin >> a[i];
    cout << "\nsecond massive:\n ";
    for(int i = 0; i < 10; i++)
        cin >> b[i];
    int min = a[0];
    for(int i = 0; i < 10; i++)
    {
        if(a[i] != b[i])
        {
            if(a[i] < min)
                min = a[i];
        }
    }
    cout << "Minimum = " <<min;
}
так?
Dekio
Фрилансер
Эксперт С++
5837 / 1218 / 214
Регистрация: 23.11.2010
Сообщений: 3,378
Записей в блоге: 1
10.11.2011, 01:04     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. #6
STL
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <iostream>
#include <vector>
#include <algorithm>
 
int main()
{
    std::vector <int> Fvec, Svec;
    int tmp;
    std::cout<<"Enter first array"<<std::endl;
    while(std::cin>>tmp)
    Fvec.push_back(tmp);
    std::cin.clear();
    std::cout<<"Enter second array"<<std::endl;
    while(std::cin>>tmp)
    Svec.push_back(tmp); 
    std::sort(Fvec.begin(),Fvec.end());
    std::sort(Svec.begin(),Svec.end());
    tmp = 0;
    while(std::binary_search(Svec.begin(),Svec.end(),Fvec.at(tmp)))
    tmp++;
    std::cout<<"Result "<<Fvec.at(tmp)<<std::endl;    
    system("pause");
    return 0;
}
TheWitcher
1 / 1 / 0
Регистрация: 30.09.2010
Сообщений: 23
10.11.2011, 18:02  [ТС]     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. #7
Цитата Сообщение от amor1k Посмотреть сообщение
попробуем

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
 
int main()
{
    int a[10], b[10];
    cout << "first massive:\n ";
    for(int i = 0; i < 10; i++)
        cin >> a[i];
    cout << "\nsecond massive:\n ";
    for(int i = 0; i < 10; i++)
        cin >> b[i];
    int min = a[0];
    for(int i = 0; i < 10; i++)
    {
        if(a[i] != b[i])
        {
            if(a[i] < min)
                min = a[i];
        }
    }
    cout << "Minimum = " <<min;
}
так?

вроде да, огромное спасибо выручил.

Спасибо всем за помощь и Dekio, этот код тоже может мне пригодится.
Сыроежка
Заблокирован
10.11.2011, 18:56     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. #8
Ваша задача решается очень просто,если подправить стандартный алгоритм std::min_element, заменив его алгоритмом min_element_if. Тогда выможете указывать любое условие для поиска минимального значения.
Но так как вы, как я догадываюсь, не знаете стандартных алгоритмов, то вам нужно решение задачи "в лоб".

Во-первых, вам надо написать простую функцию find (по аналогии со стандартным алгоритмом std::find), которая проверяет, входит ли элемент первого массива во второй массив. Если функция find находит элемент, то либо она должна вернуть индекс или указатель на него, либо просто логическое значение true или false.

Напишем эту функцию

C++
1
2
3
4
5
6
7
bool find( int a[], size_t n, int value )
{
   size_t i = 0;
   while ( ( i < n ) && ( a[i] != value ) ) i++;
 
   return ( i != n );
}
Теперь пишем функцию поиска минимального элемента по условию

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
size_t min_element_if( int a[], size_t n, int b[], size_t m )
{
   size_t i = 0;
   while ( ( i < n ) && find( b, m, a[i] ) ) i++;
   if ( i < n )
   {
      int j = i + 1;
      for ( ; j < n ; j++ )
      {
         if ( !find( b, m, a[j] ) && a[j] < a[i] ) i = j;
      }
   }
 
   return ( i );
}
Теперь, если у вас заданы два массива a[n] и b[m],то в main вызов этих функций будет очень прост

C++
1
2
3
4
size_t min = min_element_if( a, n, b, m );
 
if ( min < n ) std::cout << "minimum = " << a[min] << ", in position " << min << std::endl;
else std::cout << "minimum has not been found\n";
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2011, 00:52     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив.
Еще ссылки по теме:
Дано одномерный массив С, состоящий из 16 элементов. Вычислить среднее арифмет. значение четных элементов массива которые делятся на 3 с остатком 1 C++
Дан одномерный целочисленный массив А из N элементов. Найти в нём максимальное значение среди простых чисел C++
Одномерный массив. Создать массив Х суммы среднеарифметического элементов массива А с каждым элементом массива А C++
C++ Одномерный массив А суммируется из 30 элементов. Найти и напечатать числа, которые встречаются в массиве более одного раза
C++ Одномерный массив: найти количество элементов массива, меньших С

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
TheWitcher
1 / 1 / 0
Регистрация: 30.09.2010
Сообщений: 23
11.11.2011, 00:52  [ТС]     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив. #9
Цитата Сообщение от Сыроежка Посмотреть сообщение
Ваша задача решается очень просто,если подправить стандартный алгоритм std::min_element, заменив его алгоритмом min_element_if. Тогда выможете указывать любое условие для поиска минимального значения.
Но так как вы, как я догадываюсь, не знаете стандартных алгоритмов, то вам нужно решение задачи "в лоб".

Во-первых, вам надо написать простую функцию find (по аналогии со стандартным алгоритмом std::find), которая проверяет, входит ли элемент первого массива во второй массив. Если функция find находит элемент, то либо она должна вернуть индекс или указатель на него, либо просто логическое значение true или false.

Напишем эту функцию

C++
1
2
3
4
5
6
7
bool find( int a[], size_t n, int value )
{
   size_t i = 0;
   while ( ( i < n ) && ( a[i] != value ) ) i++;
 
   return ( i != n );
}
Теперь пишем функцию поиска минимального элемента по условию

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
size_t min_element_if( int a[], size_t n, int b[], size_t m )
{
   size_t i = 0;
   while ( ( i < n ) && find( b, m, a[i] ) ) i++;
   if ( i < n )
   {
      int j = i + 1;
      for ( ; j < n ; j++ )
      {
         if ( !find( b, m, a[j] ) && a[j] < a[i] ) i = j;
      }
   }
 
   return ( i );
}
Теперь, если у вас заданы два массива a[n] и b[m],то в main вызов этих функций будет очень прост

C++
1
2
3
4
size_t min = min_element_if( a, n, b, m );
 
if ( min < n ) std::cout << "minimum = " << a[min] << ", in position " << min << std::endl;
else std::cout << "minimum has not been found\n";
Всё, разобрался ОГРОМНОЕ спасибо. Очень полезная инфа
Yandex
Объявления
11.11.2011, 00:52     Одномерный массив. Найти наименьшие среди элементов первого массива, которые не входят во второй массив.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru