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

Удалить из отсортированного вектора, числа которые являются "квадратными" - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
19.12.2013, 15:59     Удалить из отсортированного вектора, числа которые являются "квадратными" #1
Добрый день!
Есть вопросы по некоторым функциям, помогите плиз.

Вот допустим у меня идет сортировка вектора по убыванию, но не пойму как сделать сортировку только нечетных цифр?

Я не пойму как мне удалить из отсортированного вектора, числа которые являются "квадратными".

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
59
60
#include <iostream>
#include <ostream>
#include <iomanip>
#include <math.h>
 #include <vector>
#include <iterator>
 
int f1 (int n, int a, int b) //генерация чисел
    {   int total;
        for(int i=0; i<n; i++) 
             {
                 total = a + rand() % ( b - a + 1 ); //генерация случайных чисел в диапазоне а б
                 
             }
        return total;
    }
void show_vector( vector<int>&v1) 
    {
        vector<int>::iterator it; //Объявляем итератор
        for (it=v1.begin();it!=v1.end();it++)
        cout<<" "<<*it; //с помощью итератора выводим элементы вектора на экран
        cout<<endl;
        return;
    }
 
void BubbleSort(vector<int>&v1,int &n)// Отсортировать по убыванию те элементы вектора, которые содержат только нечёт-ные цифры
    {  
        for(int i=0; i<n; i++)
        for(int j=i+1; j<n; j++)    
        if(v1[i]<v1[j])swap(v1[j],v1[i]);
        return; 
    }
int delet (vector<int>v1, int &n) //Удалить из вектора все элементы, которые являют-ся полными квадратами.
    {   
        
    }
int main()
{ 
setlocale(LC_ALL, "Russian"); // функция локализации вызывается только один раз
int n, a, b;
cout<<" Введите Данные:"<< endl;
cout<<" "<< endl;
cout<<" Количество элементов вектора: "<< endl; cin>>n;
cout<<" "<< endl;
cout<<" Диапазон значений: "<< endl; cin>>a>>b;
cout<<" "<< endl;
system ("cls");
std::vector <int> v1; //Объявили вектор в n элементов. ВОЗМОЖНО нужно сразу резервировать и задавать кол-во элементов????
cout<<" Вектор заполнен: "<<endl; show_vector(v1);
cout<<" "<< endl;
for (int i=0;i<n;i++) v1.push_back(f1(n,a,b)); //заполняем вектор n случайными числами
cout<<" "<< endl;
//заполнили вектор и вывели
//задание 1 
BubbleSort(v1,n);
cout<<" Задание.1 Вектор отсортирован: "<<endl; show_vector(v1);
cout<<" "<< endl;
system("PAUSE"); 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.12.2013, 15:59     Удалить из отсортированного вектора, числа которые являются "квадратными"
Посмотрите здесь:

C++ Проверить утверждение "результатами вычислений по формуле x*x+x+17 при 0 ≤ х ≤ 15 являются простые числа"
C++ Определить количество слов, которые содержат ровно четыре буквы "о", "О"
C++ Определить длину каждого слова. Удалить все буквы "а" и "о" с фамилии
C++ Проверить утверждение "результатами вычислений по формуле х^2+х+17, при 0 <=х <= 15, являются простые числа"
Если возможно, упорядочить булевы вектора, или вывести сообщение "Вектора несравнимы" C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
19.12.2013, 16:20     Удалить из отсортированного вектора, числа которые являются "квадратными" #2
Насчет сортировки нечетных чисел. Лучше конечно завести новый вектор в котором будут хранится отсотированные нечетные числа иначе у вас будет каша. Я думаю понятно как определить какие числа нечетные. Насчет полных квадратов примерно тоже самое что нечетные числа, так как у вас тип в векторе int то нужно взять корень квадратный из числа и потом снова возвести в квадрат, думаю должно сработать и сравнить с исходным
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
19.12.2013, 16:38     Удалить из отсортированного вектора, числа которые являются "квадратными" #3
о_О_Кто_здесь, во-первых, почему вас двое? Вы одноклассники?
Во-вторых, сам в первом коде не сортировка пузырьком! В пузырьковой надо сравнивать СОСЕДНИЕ ЭЛЕМЕНТЫ, а не i-й и j-й!
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
19.12.2013, 19:30  [ТС]     Удалить из отсортированного вектора, числа которые являются "квадратными" #4
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
о_О_Кто_здесь, во-первых, почему вас двое? Вы одноклассники?
Во-вторых, сам в первом коде не сортировка пузырьком! В пузырьковой надо сравнивать СОСЕДНИЕ ЭЛЕМЕНТЫ, а не i-й и j-й!
Я один.
хм , насчет пузырька хз. Смысл тот же выходит.
C++
1
2
3
 for(int i=0; i<n; i++)
        for(int j=i+1; j<n; j++)    
        if(v1[i]<v1[j])swap(v1[j],v1[i]);
Добавлено через 1 минуту
Цитата Сообщение от ShadowFirst Посмотреть сообщение
Насчет сортировки нечетных чисел. Лучше конечно завести новый вектор в котором будут хранится отсотированные нечетные числа иначе у вас будет каша. Я думаю понятно как определить какие числа нечетные. Насчет полных квадратов примерно тоже самое что нечетные числа, так как у вас тип в векторе int то нужно взять корень квадратный из числа и потом снова возвести в квадрат, думаю должно сработать и сравнить с исходным
прочитай мой пост лучше. Понятно как сравнить, а как реализовать нет.
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
19.12.2013, 21:31     Удалить из отсортированного вектора, числа которые являются "квадратными" #5
C++
1
2
3
for(int i=0; i<n; i++)
        for(int j=i+1; j<n; j++)    
        if(v1[i]<v1[j])swap(v1[j],v1[i]);
Вот ваша функция сортировки

Теперь просто делаем следующее
C++
1
2
3
4
5
for(int i=count; i<n; i++)
    if (v[i]%2!=0)
        for(int j=i+1; j<n; j++)
            if (v1[i]%2 != 0)      
                 if(v1[i]<v1[j])swap(v1[j],v1[i]);
Вот как то так. Но тут есть одно но, все отсортированные элементы будут находится между неотсортированными четными, по этому и сказал что каша получится. Если такого не хотите то вначале найдите все нечетные числа и запишите их в другой массив, а потом просортируйте его.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
20.12.2013, 00:15     Удалить из отсортированного вектора, числа которые являются "квадратными" #6
это всё не пузырёк!!!

Добавлено через 2 минуты
Алгоритмы сортировок
разницу между пузырьком и твоим вариантом видишь?
В пузырьке сравниваются соседние элементы, например
C++
1
if (v1[j + 1] < v1[j])
а у вас вообще какие-то два разных! один i-й, другой j-й
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
20.12.2013, 20:27     Удалить из отсортированного вектора, числа которые являются "квадратными" #7
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
это всё не пузырёк!!!

Добавлено через 2 минуты
Алгоритмы сортировок
разницу между пузырьком и твоим вариантом видишь?
В пузырьке сравниваются соседние элементы, например
C++
1
if (v1[j + 1] < v1[j])
а у вас вообще какие-то два разных! один i-й, другой j-й
может это и не пузырек, но по логике работы программы она сортирует и это важно
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
20.12.2013, 21:12     Удалить из отсортированного вектора, числа которые являются "квадратными" #8
Цитата Сообщение от ShadowFirst Посмотреть сообщение
может это и не пузырек, но по логике работы программы она сортирует и это важно
если тебе важно "лишь бы сортировало", то специально для тебя подойдёт глупая сортировка. http://ru.wikipedia.org/wiki/%C3%EB%...F0%EE%E2%EA%E0
То, что ты предлагаешь, похоже на сортировку выбором, но при этом постоянно меняются местами элементы вместо того, чтобы ё раз за цикл искать максимальный. Эта не пузырьковая сортировка, не надо заблуждаться!
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
20.12.2013, 22:32  [ТС]     Удалить из отсортированного вектора, числа которые являются "квадратными" #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
если тебе важно "лишь бы сортировало", то специально для тебя подойдёт глупая сортировка. http://ru.wikipedia.org/wiki/%C3%EB%...F0%EE%E2%EA%E0
То, что ты предлагаешь, похоже на сортировку выбором, но при этом постоянно меняются местами элементы вместо того, чтобы ё раз за цикл искать максимальный. Эта не пузырьковая сортировка, не надо заблуждаться!
как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void BubbleSort(vector<int>&v1,int &n)// Отсортировать по убыванию те элементы вектора, которые содержат только нечёт-ные цифры
    {  
int tmp;
for(int i = 0; i < n - 1; ++i) // i - номер прохода
        {            
            for(int j = 0; j < n - 1; ++j) // внутренний цикл прохода
                {    
                    if(v1[j+1]>v1[j]) 
                        {
                            tmp = v1[j + 1]; 
                            v1[j + 1] = v1[j]; 
                            v1[j] = tmp;
                        }
                }
        }
    }
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
20.12.2013, 22:40     Удалить из отсортированного вектора, числа которые являются "квадратными" #10
Сообщение от Kuzia domovenok Посмотреть сообщение
если тебе важно "лишь бы сортировало", то специально для тебя подойдёт глупая сортировка. http://ru.wikipedia.org/wiki/%C3%EB%...F0%EE%E2%EA%E0
То, что ты предлагаешь, похоже на сортировку выбором, но при этом постоянно меняются местами элементы вместо того, чтобы ё раз за цикл искать максимальный. Эта не пузырьковая сортировка, не надо заблуждаться!
Внимательнее посмотрите еще раз на код который здесь был предложен вначале, два цикла, а вы указали на глупую сортировку где цикл один, вы что то напутали

Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
как-то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void BubbleSort(vector<int>&v1,int &n)// Отсортировать по убыванию те элементы вектора, которые содержат только нечёт-ные цифры
    {  
int tmp;
for(int i = 0; i < n - 1; ++i) // i - номер прохода
        {            
            for(int j = 0; j < n - 1; ++j) // внутренний цикл прохода
                {    
                    if(v1[j+1]>v1[j]) 
                        {
                            tmp = v1[j + 1]; 
                            v1[j + 1] = v1[j]; 
                            v1[j] = tmp;
                        }
                }
        }
    }
Как то эта сортировка настораживает хоть и написано название функции пузырьком
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
20.12.2013, 23:45     Удалить из отсортированного вектора, числа которые являются "квадратными" #11
Цитата Сообщение от ShadowFirst Посмотреть сообщение
Внимательнее посмотрите еще раз на код который здесь был предложен вначале
мда. спасибо, я знаю, какие бывают алгоритмы сортировок. А вот если тебя "настораживает" сортировка пузырьком, это тебе её нужно повторить, не мне. Я изначально указал на ошибку, плюс о_О_Кто_здесь всё верно исправил в твоём коде. А ты, похоже, неуверенно знаешь алгоритм сортировки пузырьком.
ShadowFirst
54 / 47 / 1
Регистрация: 31.10.2013
Сообщений: 161
21.12.2013, 00:47     Удалить из отсортированного вектора, числа которые являются "квадратными" #12
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
мда. спасибо, я знаю, какие бывают алгоритмы сортировок. А вот если тебя "настораживает" сортировка пузырьком, это тебе её нужно повторить, не мне. Я изначально указал на ошибку, плюс о_О_Кто_здесь всё верно исправил в твоём коде. А ты, похоже, неуверенно знаешь алгоритм сортировки пузырьком.
Ваша невнимательность поражает, то не мой код, а автора топика, который я подогнал для выполнения его же задания сортировки нечетных элементов. Во вторых мне начальный код нравится больше, хоть это и не сортировка пузырьком, потому что в нем каждый раз количество элементов которые нужно обойти сокращается на 1, а в сортировке пузырьком этого не происходит, так как там начинается каждый раз сначала второй цикл.
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
21.12.2013, 18:50  [ТС]     Удалить из отсортированного вектора, числа которые являются "квадратными" #13
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
мда. спасибо, я знаю, какие бывают алгоритмы сортировок. А вот если тебя "настораживает" сортировка пузырьком, это тебе её нужно повторить, не мне. Я изначально указал на ошибку, плюс о_О_Кто_здесь всё верно исправил в твоём коде. А ты, похоже, неуверенно знаешь алгоритм сортировки пузырьком.
Не разводите шума из-за такой мелочи.
я исправил, вот так будет как надо.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void BubbleSort(vector<int>&v1,int &n)// Отсортировать по убыванию те элементы вектора, которые содержат только нечёт-ные цифры
{  
int tmp;
int n1=n-1;
for(int i = 0; i < n1; ++i) // i - номер прохода
    {            
        for(int j = i; j < n; ++j) // внутренний цикл прохода
            {    
                if(zifra(v1[i]) &&  zifra(v1[j]) && v1[i]<v1[j]) 
                    {
                        tmp = v1[j ]; 
                        v1[j ] = v1[i]; 
                        v1[i] = tmp;
                    }
            }
    }
}
Kuzia domovenok и ShadowFirst вот так будет правильнее по постановке задачи.
Спасибо за правильное наставление. Теперь нужно выполнить другие 2 задачи в этом задании.
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
21.12.2013, 20:17  [ТС]     Удалить из отсортированного вектора, числа которые являются "квадратными" #14
Пытаюсь из отсортированного вектора удалить числа которые являются полными квадратами. Пока не получается

Выходит что-то типо этого:
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
bool zifra2(int a) //вычисляется полные квадраты
{
    int i=0;
    bool res=true;
    if(a<0) a=-a;//если а меньше нуля меня знак. вместе абс
    int z=a%10;// взять новую текущую последнюю цифру
 
    while(kvadrat(i)==a) // пока есть в числе цифры и текущая цифра квадратная
    {
        a/=10; //отбросить последнюю цифру
        z=a%10; // взять новую текущую последнюю цифру
    }
    if(kvadrat(i)<a) res=faulse; 
    else ++i;
    return res;
}
 
void delet (vector<int>&v1, int &n)
{
for (int i=0;i<n; i++)
{
if(zifra(v1[i]))//если квадратное
v1.erase(v1.begin()+i); // удаляем или надо v1.erase(v1.begin(),v1.end(),i,v1.end()); надеюсь на советы.
}// или может сделать надо еще else i++;
return;
}
надеюсь на хорошие советы.
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
21.12.2013, 20:21     Удалить из отсортированного вектора, числа которые являются "квадратными" #15
а где функция zifra? я вижу лишь zifra2
возможно zifra это старая версия
тогда и в delet надо вызов заменить с zifra на zifra2
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
21.12.2013, 20:26  [ТС]     Удалить из отсортированного вектора, числа которые являются "квадратными" #16
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а где функция zifra? я вижу лишь zifra2
возможно zifra это старая версия
тогда и в delet надо вызов заменить с zifra на zifra2
Да, это проверял другое. У меня есть еще zifra и zifra2
Там просто не изменил.
Ошибка по прежнему выходит. Я определенно, где-то что-то не правильно делаю.
Точнее не понимаю, как правильнее сделать, хотя читал и смотрел неоднократно примеры.
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
21.12.2013, 20:28  [ТС]     Удалить из отсортированного вектора, числа которые являются "квадратными" #17
Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
Да, это проверял другое. У меня есть еще zifra и zifra2
Там просто не изменил.
Ошибка по прежнему выходит. Я определенно, где-то что-то не правильно делаю.
Точнее не понимаю, как правильнее сделать, хотя читал и смотрел неоднократно примеры.
Полная версия:

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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include <iostream>
#include <ostream>
#include <iomanip>
#include <math.h>
#include <ctime>            // для генерации случайных чисел начиная с произвольного числа
 #include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
 
int f1 (int n, int a, int b) //генерация чисел
    {   int total;
        for(int i=0; i<n; i++) 
             {
                 total = a + rand() % ( b - a + 1 ); //генерация случайных чисел в диапазоне а б
                 
             }
        return total;
    }
 
void show_vector( vector<int>&v1) //    Написать функцию, выводящую на экран элементы вектора – в столбик с указанием индекса или в строку через пробел без указания индекса
    {
        vector<int>::iterator it; //Объявляем итератор
        for (it=v1.begin();it!=v1.end();it++)
        cout<<" "<<*it; //с помощью итератора выводим элементы вектора на экран
        cout<<endl;
        return;
    }
 
bool zifra(int a)
{
    bool res=true;
    if(a<0) a=-a;
    int z=a%10;
    while(a>0 && z%2!=0) // пока есть в числе цифры и текущая цифра нечётная
    {
        a/=10; //отрбросить последнюю цифру
        z=a%10; // взять новую текущую
    }
    if(a>0) res=false; // искать есть где -- попалась чётная цифра
    return res;
}
unsigned int kvadrat(unsigned int tmp)
{
    return tmp*tmp;
}
bool zifra2(int a)
{
    int i=0;
    bool res=false;
    if(a<0) a=-a;
    int z=a%10;
 
    while( kvadrat(i)<a) // пока есть в числе цифры и текущая цифра нечётная
    {
        a/=10; //отрбросить последнюю цифру
        z=a%10; // взять новую текущую
    }
    if(kvadrat(i)==a) res=true; // искать есть где -- попалась чётная цифра
    else ++i;
    return res;
}
void BubbleSort(vector<int>&v1,int &n)// Отсортировать по убыванию те элементы вектора, которые содержат только нечётные цифры
{  
int tmp;
int n1=n-1;
for(int i = 0; i < n1; ++i) // i - номер прохода
    {            
        for(int j = i; j < n; ++j) // внутренний цикл прохода
            {    
                if(zifra(v1[i]) &&  zifra(v1[j]) && v1[i]<v1[j]) 
                    {
                        tmp = v1[j ]; 
                        v1[j ] = v1[i]; 
                        v1[i] = tmp;
                    }
            }
    }
}
 
 
void delet (vector<int>&v1, int &n)
{
for (int i=0;i<n; i++)
{
if(zifra2(v1[i]))
v1.erase(v1.begin()+i);
}
}
int main()
{ 
setlocale(LC_ALL, "Russian"); // функция локализации вызывается только один раз
const int NotUsed = system( "color 2" );
    int n, a, b;
    srand((unsigned)time(NULL));   // для генерации случайных чисел начиная с произвольного числа
    cout<<" Задание по варианту:"<< endl;
    cout<<" "<< endl;
    cout<<" 1) Отсортировать по убыванию те элементы вектора, которые содержат только нечётные цифры"<< endl;
    cout<<" "<< endl;
    cout<<" 2) Удалить из вектора все элементы, которые являются полными квадратами."<< endl;
    cout<<" "<< endl;
    cout<<" 3) Перед элементами второго вектора, являющимися двузначными числами, вставить наибольшее по модулю число из первого вектора "<< endl;
    cout<<" "<< endl;
    cout<<" Введите Данные:"<< endl;
    cout<<" "<< endl;
    cout<<" Количество элементов вектора: "<< endl; cin>>n;
    cout<<" "<< endl;
    cout<<" Диапазон значений: "<< endl; cin>>a>>b;
    cout<<" "<< endl;
    system ("cls");
std::vector <int> v1, v2, v3; //Объявили вектор в n элементов. ВОЗМОЖНО нужно сразу резервировать и задавать кол-во элементов????
for (int i=0;i<n;i++) v1.push_back(f1(n,a,b)); //заполняем вектор n случайными числами
cout<<" "<< endl;
//заполнили вектор и вывели
cout<<" Вектор 1 заполнен: "<<endl; show_vector(v1);
cout<<" "<< endl;
//задание 1 
BubbleSort(v1,n);
cout<<" Вектор 1 отсортированы только нечетные числа: "<<endl; show_vector(v1);
//задание 2
 
delet(v1,n);
v1=v2;
cout<<" Вектор 2 были удалены все квадратные числа: "<<endl; show_vector(v2);
 
//cout<<" Задание.1 Вектор отсортирован: "<<endl; show_vector(v1);
cout<<" "<< endl;
 
 
 
 
 
system("PAUSE"); 
return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
21.12.2013, 20:30     Удалить из отсортированного вектора, числа которые являются "квадратными" #18
о_О_Кто_здесь, кстати да! размер вектора уменьшается и надо определённо одновременно с этим делать и i--
и вообще в цикле перебирать итераторы, а не индексы.

Добавлено через 1 минуту
ЗАЧЕМ вместе с вектором вообще передавать размер? Вектор же и так его содержит!
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
21.12.2013, 20:34  [ТС]     Удалить из отсортированного вектора, числа которые являются "квадратными" #19
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
о_О_Кто_здесь, кстати да! размер вектора уменьшается и надо определённо одновременно с этим делать и i--
и вообще в цикле перебирать итераторы, а не индексы.

Добавлено через 1 минуту
ЗАЧЕМ вместе с вектором вообще передавать размер? Вектор же и так его содержит!
не совсем пока что вникаю, можете тыкать "носом" если так будет понятней.

это вы про что именно сейчас ссылаетесь...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.12.2013, 23:20     Удалить из отсортированного вектора, числа которые являются "квадратными"
Еще ссылки по теме:

Удалить из двусвязного списка все элементы до первого "*" и после последнего "*" C++
Удалить из массива числа, которые являются полным квадратом и имеют нечетную сумму цифр C++
C++ Удалять в словах, которые заканчиваются на букву "А" все другие буквы "А"

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

Или воспользуйтесь поиском по форуму:
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
21.12.2013, 23:20     Удалить из отсортированного вектора, числа которые являются "квадратными" #20
о_О_Кто_здесь,
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <vector>
#include <iostream>     
#include <algorithm>    
#include <iterator>
using namespace std;
bool isSquare(int arg){
  static const unsigned int squares[] = {
    0, 1, 4, 9,
    16, 25, 36, 49,
    64, 81, 100, 121,
    144, 169, 196, 225,
    256, 289, 324, 361,
    400, 441, 484, 529,
    576, 625, 676, 729,
    784, 841, 900, 961,
    1024, 1089, 1156, 1225,
    1296, 1369, 1444, 1521,
    1600, 1681, 1764, 1849,
    1936, 2025, 2116, 2209,
    2304, 2401, 2500, 2601,
    2704, 2809, 2916, 3025,
    3136, 3249, 3364, 3481,
    3600, 3721, 3844, 3969,
    4096, 4225, 4356, 4489,
    4624, 4761, 4900, 5041,
    5184, 5329, 5476, 5625,
    5776, 5929, 6084, 6241,
    6400, 6561, 6724, 6889,
    7056, 7225, 7396, 7569,
    7744, 7921, 8100, 8281,
    8464, 8649, 8836, 9025,
    9216, 9409, 9604, 9801,
    10000, 10201, 10404, 10609,
    10816, 11025, 11236, 11449,
    11664, 11881, 12100, 12321,
    12544, 12769, 12996, 13225,
    13456, 13689, 13924, 14161,
    14400, 14641, 14884, 15129,
    15376, 15625, 15876, 16129,
    16384, 16641, 16900, 17161,
    17424, 17689, 17956, 18225,
    18496, 18769, 19044, 19321,
    19600, 19881, 20164, 20449,
    20736, 21025, 21316, 21609,
    21904, 22201, 22500, 22801,
    23104, 23409, 23716, 24025,
    24336, 24649, 24964, 25281,
    25600, 25921, 26244, 26569,
    26896, 27225, 27556, 27889,
    28224, 28561, 28900, 29241,
    29584, 29929, 30276, 30625,
    30976, 31329, 31684, 32041,
    32400, 32761, 33124, 33489,
    33856, 34225, 34596, 34969,
    35344, 35721, 36100, 36481,
    36864, 37249, 37636, 38025,
    38416, 38809, 39204, 39601,
    40000, 40401, 40804, 41209,
    41616, 42025, 42436, 42849,
    43264, 43681, 44100, 44521,
    44944, 45369, 45796, 46225,
    46656, 47089, 47524, 47961,
    48400, 48841, 49284, 49729,
    50176, 50625, 51076, 51529,
    51984, 52441, 52900, 53361,
    53824, 54289, 54756, 55225,
    55696, 56169, 56644, 57121,
    57600, 58081, 58564, 59049,
    59536, 60025, 60516, 61009,
    61504, 62001, 62500, 63001,
    63504, 64009, 64516, 65025
  };
      const unsigned int *p = squares;
 
    if (p[128] <= arg) p += 128;
    if (p[ 64] <= arg) p +=  64;
    if (p[ 32] <= arg) p +=  32;
    if (p[ 16] <= arg) p +=  16;
    if (p[  8] <= arg) p +=   8;
    if (p[  4] <= arg) p +=   4;
    if (p[  2] <= arg) p +=   2;
    if (p[  1] <= arg) p +=   1;
    return *p==arg;
}
 
 
int main() {
    vector<int> v1;
    //for (int i=0;i<n;i++) v1.push_back(f1(n,a,b)); //заполняем вектор n случайными числами
    for (int i=0;i<5;i++){
        int dig;
        cin>>dig;
        v1.push_back(dig); 
    }
    cout<<endl;
    v1.erase(remove_if(v1.begin(), v1.end(), isSquare), v1.end());
    copy(v1.begin(), v1.end(), ostream_iterator<int>(cout, ", ") );
    cin.get();
    return 0;
}
Yandex
Объявления
21.12.2013, 23:20     Удалить из отсортированного вектора, числа которые являются "квадратными"
Закрытая тема Создать тему
Опции темы

Текущее время: 17:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru