C/C++

Дан целочисленный массив с количеством элементов п. Сжать массив, выбросив из него каждый второй элемент.

//4 скажите насколько это решение рациональное? придумал вот но по моему это все костыли..
#include
using namespace std;
#include
int main(){
int n, i;
int u = 0;
cin>>n;
//cout<<n/2;
int *a = new int [n];
int *b = new int [n/2];
for(i = 0; i < n; i++) {
cin>>a[i];

}
b[0] = a[0];
for(i = 1; i < n; i++) {
if(i%2 ==0 ) {
u++;
b[u]= a[i];
}
}
if(n%2 ==0)
for(i = 0; i < n/2; i++)
cout<<b[i];
else
for(i = 0; i <= n/2; i++)
cout<<b[i];

delete [] a,b;
return 0;
}
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
class Random {
public:
Random() {
random_device device;
random_generator.seed(device());
}
int next(int first, int last) {
uniform_int_distribution<int> range(first, last);
return range(random_generator);
}
private:
mt19937 random_generator;
};
int main() {
cout << "Size: ";
size_t na;
cin >> na;
auto a = new int[na];
auto nb = (na >> 1) + (na & 1);
auto b = new int[nb];
Random rand;
for (auto i = 0U; i < na; ++i) a[i] = rand.next(10, 99);
for (auto i = 0U; i < na; ++i) cout << a[i] << ' ';
cout.put('\n');
auto bia = a;
auto bib = b;
auto eia = a + na;
while (bia < eia) {
*bib = *bia;
++bib;
bia += 2;
}
for (auto i = 0U; i < nb; ++i) cout << b[i] << ' ';
cout.put('\n');
delete[] a;
delete[] b;
system("pause > nul");
}
Энвер Аметов
Энвер Аметов
69 530
Лучший ответ
Обычно delete [] a,b; пишется раздельно, так: delete [] a; delete [] b;
В любой версии компилятора C++ должно быть выдано предупреждение, что правый операнд после запятой не имеет эффекта.
Это вам, батенька, не сокращенное объявление, а удаление массива. Не путайте.)))
1. Зачем вручную колупаться с выделением-освобождением памяти, если есть векторы?
2. Зачем вообще вводить первый массив целиком, если можно сразу формировать массив ответа, выкидывая каждое второе число из ввода?
3. Последний if не нужен, можно просто сделать условие i < (n + 1) / 2.
4. Непонятно, чем a[0]=b[0] заслужил такое особое обращение, если все элементы дальше переносятся циклом непосредственно под этой строчкой. Лучше поменять цикл, чтобы нулевой элемент тоже им цеплялся.
Л)
Леха )
36 956
Юрий Гуреев ну векторы мы еще не проходили, шарага)
если n =5 то n/2 = 5/2 = 2. получаем массив из 2, но нужен то из 3. не надо делать n/2. тебе жалко памяти?
Андрей Шубин
Андрей Шубин
10 755
Юрий Гуреев ну так массив начинается с 0. Получаем 0 1 2 вот и 3 элемента
Андрей Шубин точнее удалить каждый второй элемент)))) ну да ладно. пора спать)

Похожие вопросы