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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Studentka
3 / 3 / 0
Регистрация: 10.12.2009
Сообщений: 108
#1

Удалить из массива все элементы, совпадающие с минимальным - C++

30.09.2010, 19:29. Просмотров 1563. Ответов 6
Метки нет (Все метки)

здравствуйте)
у меня такой вопрос.
я сформировала массив.
мне нужно в нём все элементы, совпадающие с миним. значением удалить..
и вывести полученный массив


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
#include <iostream.h>
void main()
{
int j,i,min,size;
int a[100];
cout<<"input size";
cin>>size;
for (i=0; i<size; i++)
{a[i]=random(100);
cout <<i<<"element-"<<a[i]<<'\n';
}
 
min=a[0];
 
for (i=1;i<size;i++)
{if (a[i] < min)
min = a[i];                
}
 
for(i=0; i<size; i++)
if(a[i]==min)
{for(j=i+1; j<size; j++)
a[j-1]=a[j];
size--;
i--; 
 
cout<<"element-"<<a[i]<<'\n';
}
 
 
cout<<"min="<<min<<'\n';
system("pause");
}

я знаю, что для удаления нудно использовать такой фрагмент-
C++
1
2
3
4
5
6
7
8
9
for(i=0; i<size; i++)
if(a[i]==min)
{for(j=i+1; j<size; j++)
a[j-1]=a[j];
size--;
i--; 
 
cout<<"element-"<<a[i]<<'\n';
}
вроде бы как раз эта часть и не работает как надо, потому что мин. знач считает и выводит правильно
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2010, 19:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удалить из массива все элементы, совпадающие с минимальным (C++):

Удалить из массива все элементы, совпадающие с его минимальным значением - C++
Сформировать одномерный массив целых чисел, используя датчик случайных чисел, и распечатать массив. Удалить из массива все элементы,...

Массив (Удалить все элементы, совпадающие с его минимальным значением) - C++
Помогите с программой код вроде есть, но не работает: Сформировать одномерный массив целых чисел, используя датчик случайных чисел. ...

Дан массив int *a. Удалить из массива все элементы совпадающие с первым элементом - C++
Дан массив int *a. Удалить из массива все элементы совпадающие с первым элементом, используя динамическое выделение памяти.

Удалить все элементы, расположенные между минимальным и максимальным элементами массива - C++
Дан линейный массив из n элементов. Удалить все элементы, расположенных между минимальным и максимальным элементами массива. Помогите...

Удалить все элементы массива расположенные между максимальным и минимальным элементами - C++
в целочисленном массиве X(N) удалить все элементы, расположенные между максимальным и минимальным элеметами. Найти средне арифметическое...

Дан массив. Записать во второй массив все элементы, не совпадающие с минимальным - C++
Дан массив M(14).Записать в массив B все элементы , не совпадающие с минимальным. Cоставить блок схему программы

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
30.09.2010, 20:06 #2
Вот так сбрасываются в 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
#include <iostream>
#include <ctime>
using namespace std;
 
int main()
{
    srand(time(NULL));
    int Arr[10];
    int min; int temp;
    for(int i = 0;i < 10;i++)
    {
        Arr[i] = 1 + rand()%10;
        cout << Arr[i] << " ";
    }
 
    min = Arr[0];
 
    for(int i = 1;i < 10;i++)
    {
if(Arr[i] < min)
{
    temp = min; min = Arr[i]; Arr[i] = temp;
    i--;
continue;
}
    }
    cout << endl << min << endl;
 
    for(int i = 0;i < 10;i++)
    {
        if(Arr[i] == min)
            Arr[i] = NULL;
        cout << Arr[i] << " ";
    }
 
        system("pause");
        return 0;
}
Studentka
3 / 3 / 0
Регистрация: 10.12.2009
Сообщений: 108
30.09.2010, 21:28  [ТС] #3
то есть места в памяти для элементов, которые удалятся должны в слубом случае занять другие элементы какие-то..
в этой ситуации это 0,
так?
ну тогда можно и другие элементы туда положить, не нули?
TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
30.09.2010, 22:50 #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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <list>
#include <windows.h>
using namespace std;
 
bool compare(unsigned int first, unsigned int second) // простейшая функция,вызываемая
{                              // при сортировке списка
    return first < second;
}
 
int main()
{
    srand(GetTickCount());
    unsigned int i;
    list<unsigned int> my_list; // создаем список с названием my_list
    list<unsigned int>::iterator it1; // типа указатель на элементы списка(it1)
 
    for(i = 0;i < 10;i++)
    {
        int num = rand()%20;
        my_list.push_back(num); // поиещаем в список 10 рандомных чисел
    }
 
for(it1 = my_list.begin();it1 != my_list.end();++it1) // it1 = my_list.begin() указывает
cout << " " << *it1; // на 1 элемент списка. it1 != my_list.end() доходит почти до
cout << endl;         // конца списка
 
    my_list.sort(compare); // сортируем по возрастанию.(Наименьший элемент в начале)
 
for(it1 = my_list.begin();it1 != my_list.end();++it1)// выводим на экран
cout << " " << *it1;
cout << endl;
 
    it1 = my_list.begin(); // указывает на начало списка (элемент 0)
        it1++; // перемещается на 1 элемент вперед(элемент 1)
    it1 = my_list.erase(it1); // стирает его
 
    for(it1 = my_list.begin();it1 != my_list.end();++it1)
        cout << " " << *it1;
    cout << endl;
 
 
    system("pause");
}
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.09.2010, 22:57 #5
Studentka,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <algorithm>
#include <iostream>
#include <iterator>
#include <cstddef>
 
int main() {
        int         arr[] = { 1, 2, 3, 1, 4, 5, 1, 1 };
  const std::size_t size  = sizeof(arr) / sizeof(arr[0]);
 
  const int  min = *std::min_element(arr, arr + size);
        int* end =  std::remove     (arr, arr + size, min);
 
  std::copy(arr, end, std::ostream_iterator<int>(std::cout, " "));
 
  return 0;
}
Результат: http://liveworkspace.org/code/446b29...64632aa9d47d02
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
30.09.2010, 23:24 #6
Хотел облегчить. Но кажись усложнил

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
#include <iostream>
#include <list>
#include <algorithm>
#include <vector>
#include <ctime>
#include <cstdlib>
#include <functional>
 
bool cmp(int first, int second)
{
    return first<second;
}
 
int main()
{
    srand(static_cast<unsigned>(time(NULL)));
    std::list<int> List1;
    std::list<int> List2;
    int N;
    std::cout<<"Enter n: ";
    std::cin>>N;
    for(int i=0; i<N; ++i)
    {
        List1.push_back(rand()%20+1);
    }
    std::cout<<"List1\n";
    std::copy(List1.begin(), List1.end(), std::ostream_iterator<int>(std::cout, " "));
    int l=*std::min_element(List1.begin(), List1.end());
    std::cout<<"Min: "<< l <<'\n';
    List1.sort();
    List2.push_back(l);
    std::remove_copy(++List1.begin(), List1.end(), std::back_inserter(List2), l);
    std::cout<<"List2\n";
    std::copy(List2.begin(), List2.end(), std::ostream_iterator<int>(std::cout, " "));
    return 0;
}
Mochanov
Сообщений: n/a
01.10.2010, 00:49 #7
Studentka, попробуйте так
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
#include "stdafx.h"
#include <iostream>
#include <ctime>
using namespace std;
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int *a,i,j,n,min;
    srand(time(NULL));
    cout << "Input size\n";
    cin >> n;
    a=new int[n];
    for (i=0;i<n;i++)
    {
        a[i]=rand()%10;
        cout <<a[i]<<" ";
    }
    cout << endl;
    min=a[0];
    for (i=0;i<n;i++)
    {
        if(a[i]<min)
            min=a[i];
    }
    for (i=0;i<n;i++)
    {
        if(a[i]==min)
        {
            for(j=i+1;j<n;j++)
            {
                a[j-1]=a[j];
                
            }
            n--;
        }
    }
    cout << endl;
    for(i=0;i<n;i++)
    {
        cout <<a[i]<<" ";
    }
    cout << "\nmin="<<min<<endl;
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.10.2010, 00:49
Привет! Вот еще темы с ответами:

Обнулить все элементы массива, совпадающие с искомым элементом, вводимым с клавиатуры - C++
Подсобите решением?:sorry: Имеется массив чисел, вводимый с клавиатуры. Обнулить все элементы массива, совпадающие с искомым...

Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый переписать все элементы данного массива с четными номерами, во второ - C++
Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый переписать все элементы данного массива с четными...

Удалить из массива, в котором все элементы различны, максимальный и минимальный элементы - C++
Удалить из массива, в котором все элементы различны: а) максимальный элемент б) минимальный элемент Добавлено через 4 минуты ...

Удалить из строки S все подстроки, совпадающие с S0 - C++
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0. Если совпадающих подстрок нет, то вывести строку S без изменений. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
01.10.2010, 00:49
Ответ Создать тему
Опции темы

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