Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Dmitry73
1 / 1 / 0
Регистрация: 14.10.2010
Сообщений: 30
1

Удалить из массива все простые числа и подсчитать процент удаленных элементов

01.12.2010, 23:10. Просмотров 664. Ответов 3
Метки нет (Все метки)

Подскажите пожалуйста как можно из массива удалить все простые числа и подсчитать процент удаленных элементов?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2010, 23:10
Ответы с готовыми решениями:

Удалить из массива все простые числа
8-) дан массив целых чисел, удалить из массива все простые каждое четное число...

Работа со строкой (удалить все цифры, подсчитать количество и сумму удаленных цифр, заменить все заглавные латинские буквы на строчные)
Из заданной строки удалить все цифры, подсчитать количество и сумму удаленных...

Из вещественного массива X удалить все числа, превышающие среднее арифметическое элементов массива
Из вещественного массива X удалить все числа, превышающие среднее...

Удалить простые числа из массива
Добрый вечер) в общем помогите удалить на выходе простые числа из массива....

Удалить из массива простые числа используя указатель- С++
Даны целые числа а1,.....,аn, где n-целое положительное число(n<100).Если в...

3
lemegeton
2934 / 1363 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
01.12.2010, 23:35 2
Например, с помощью 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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <iomanip>
#include <time.h>
#include <math.h>
#include <vector>
#include <algorithm>
 
int random_number() { return rand() % (100) + 2; }
 
bool is_simple(int n)
{
    if (n==2) return true;
    if (n%2==0) return false;
    for (int i=3; i*i<n; i+=2)
        if ((n%i)==0)
            return false;
    return true;
}
 
int main()
{
    srand((unsigned int)time(0));
    int original_size = 50;
 
    std::vector<int> V(original_size);
    std::generate(V.begin(), V.end(), random_number);
 
    for (std::vector<int>::iterator i=V.begin(); i!=V.end(); i++)
        std::cout << std::setw(4) << *i;
    std::cout << std::endl;
 
    std::vector<int>::iterator i;
    while ((i = std::find_if(V.begin(), V.end(), is_simple))!=V.end())
        V.erase(i);
 
    for (std::vector<int>::iterator i=V.begin(); i!=V.end(); i++)
        std::cout << std::setw(4) << *i;
    std::cout << std::endl;
 
    std::cout << "Deleted " << (100.0 - (V.size() * 100.0)/(float)original_size) << "%.";
 
    system("pause");
    return 0;
}
0
Dmitry73
1 / 1 / 0
Регистрация: 14.10.2010
Сообщений: 30
01.12.2010, 23:43  [ТС] 3
спасибо, а можно простым способом еще? а то я не особо этот способ понял)
0
lemegeton
2934 / 1363 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
02.12.2010, 00:12 4
Это и был простой способ. Дело в том, что без особых ухищрений из массива ничего нельзя удалять.
Вот как-то так без 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
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
#include <iostream>
#include <iomanip>
#include <time.h>
#include <math.h>
#include <vector>
#include <algorithm>
 
int random_number() { return rand() % (100) + 2; }
 
bool is_simple(int n)
{
    if (n==2) return true;
    if (n%2==0) return false;
    for (int i=3; i*i<n; i+=2)
        if ((n%i)==0)
            return false;
    return true;
}
 
int main()
{
    srand((unsigned int)time(0));
    int original_size = 20;
 
    int *V = new int[original_size];
    
    for (int i=0; i<original_size; i++)
        std::cout << std::setw(4) << (V[i] = random_number());
    std::cout << std::endl;
 
    int simple_numbers = 0;
    for (int i=0; i<original_size; i++)
        if (is_simple(V[i])) simple_numbers++;
 
    int new_size = original_size - simple_numbers;
    int *Z = new int[new_size];
    for (int i=0, j=0; i<original_size; i++)
        if (!is_simple(V[i])) 
            Z[j++] = V[i];
    
    delete [] V;
    V = Z;
 
    for (int i=0; i<new_size; i++)
        std::cout << std::setw(4) << (V[i] = random_number());
    std::cout << std::endl;
 
    std::cout << "Deleted " << ((simple_numbers * 100.0)/(float)original_size) << "%." << std::endl;
 
    delete [] Z;
    system("pause");
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2010, 00:12

Реализовать сортировку массива: в начало поместить все простые числа, а затем все остальные
Ребят, не могу отсортировать массив. Нужно, чтобы сначала шли все простые числа...

Создать односвязный список из последовательности чисел, удалить из него все простые числа
Прошу помощи, не могу понять в чем ошибка, надо создать односвязный список из...

Удалить все простые числа и найти среднее арифметическое до и после удаления простых чисел
Помогите пожалуйста разобрать ошибки и дописать программу. Ошибки: Функции...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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