Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 17.01.2018
Сообщений: 6
1

Переписать в другой массив все элементы исходного массива с четными номерами, а потом с нечетными

17.01.2018, 22:02. Показов 1915. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задано массив целых чисел А размерностью N. Переписать в новый массив целых чисел С той же размерности сначала все элементы исходного массива с четными номерами, а потом —с нечетными.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2018, 22:02
Ответы с готовыми решениями:

Переписать в массив вначале все элементы исходного массива с четными номерами, а затем — с нечетными
Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B того же размера...

Переписать в новый целочисленный массив В все элементы исходного массива с нечетными порядковыми номерами
Дан целочисленный массив А размера N(N<15).Переписать в новый целочисленный массив В все элементы с...

Переписать в новый массив В того же размера вначале все элементы исходного массива с четными номерами
Дан целочисленный массив A размера N.переписать в новый массив В того же размера вначале все...

Массив: Вывести в начале элементы массива с чётными номерами, а потом с нечетными...
Дан массив A размер N. вывести в начале его элементы с чётными номерами (в порядке возрастания...

11
1755 / 1347 / 1407
Регистрация: 28.10.2016
Сообщений: 4,267
17.01.2018, 22:06 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <random>
 
int main()
{
    std::default_random_engine gen{ std::random_device()() };
    std::uniform_int_distribution<> dist(-20, 20);
    std::size_t n = 10;
    std::vector<int> a(n), b;
    std::generate(a.begin(), a.end(), [&dist, &gen] {return dist(gen); });
    std::copy(a.begin(), a.end(), std::ostream_iterator<int>(std::cout, " "));
    for (std::size_t i = 0; i < n; i += 2) b.push_back(a[i]);
    for (std::size_t i = 1; i < n; i += 2) b.push_back(a[i]);
    std::cout << "\n";
    std::copy(b.begin(), b.end(), std::ostream_iterator<int>(std::cout, " "));
    system("pause");
}
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
17.01.2018, 22:19 3
Или так
C++
1
2
3
4
5
6
int A[N], B[N];
int j = 0;
for(int i = 0; i<N; i+=2)
 B[j++] = A[i];
for(int i = 1; i<N; i+=2)
 B[j++] = A[i];
Можно и за один цикл сделать, если подумать, где у массива В половина.
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
18.01.2018, 15:31 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
#include <vector>
 
int main()
{
    std::vector <int> v{ 1, 5, 3, 10, 22, 4, 55, -30, 7, -5, -33 };
    std::size_t t = 1;
 
    std::stable_partition(begin(v), end(v), [&t](const auto & n) {++t; return t % 2 == 0 ? n : 0; });
 
    for (const auto & n : v) {
        std::cout << n << ' ';
    }
    system("pause");
}
0
1505 / 968 / 812
Регистрация: 30.04.2016
Сообщений: 3,334
19.01.2018, 20:54 5
olha_, здравствуйте! Я сделал так:

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
#include <iostream>
 
using namespace std;
 
int main()
{
    int n, k;
    cout << "Enter a size for A:" << "\n";
    cout << "n = ";
    cin >> n;
    int* A = new int[n];
    int* B = new int[n];
    cout << "Enter an array:" << "\n";
    for (int i = 0; i < n; i++)
    {
        cin >> A[i];
    }
    k = 0;
    for (int i = 1; i < 2 * n; i += 2)
    {
        if (i < n)
            B[k++] = A[i];
        else
        {
            if (n % 2)
                B[k++] = A[i-n];
            else
                B[k++] = A[i-n-1];
        }
    }
    cout << "Target info:\n";
    for (int i = 0; i < n; i++)
    {
        cout << B[i] << " ";
    }
    delete [] A;
    delete [] B;
    system("pause");
    return 0;
}
0
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
19.01.2018, 22:17 6
Цитата Сообщение от Байт Посмотреть сообщение
Можно и за один цикл сделать, если подумать, где у массива В половина.
Где-то посредине
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
const int sz=11;
int a[sz];
for(int i=0; i<sz; ++i)a[i]=i;
int b[sz];
int c = sz%2, half=sz/2;
if(half){
    for(int i=0, j=0; i<sz; ++i, j+=2){
if(j < sz)b[i]=a[j];
if(j+1 < sz)b[half+i+c]=a[j+1];
    }
for(int i=0; i<sz; ++i)cout<<b[i]<<' ';
}else cout<<a[0]<<endl;
 
cout<<endl;
system("pause");
return 0;
}
1
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
19.01.2018, 22:48 7
Цитата Сообщение от IGPIGP Посмотреть сообщение
Где-то посредине
Да, я тоже так подумал. Но будучи от природы весьма ленивым, я оставил ТС рассуждения о четности-нечетности и осмысления того, что есть половина при нечетном размере массива. Хотя вы совершенно правы - половина где-то посередине...
1
Комп_Оратор)
Эксперт по математике/физике
8949 / 4703 / 629
Регистрация: 04.12.2011
Сообщений: 13,999
Записей в блоге: 16
20.01.2018, 09:41 8
Цитата Сообщение от Байт Посмотреть сообщение
я оставил ТС рассуждения о четности-нечетности и осмысления
Я упростил задачу до того, чтобы (хотя бы) догадаться убрать временный объект от сложения переменных (констант) созданных вне цикла:
C++
1
2
3
4
5
6
const int half=sz/2, c = sz%2 + half;
if(half){
    for(int i=0, j=0; i<sz; ++i, j+=2){
if(j < sz)b[i]=a[j];
if(j+1 < sz)b[c+i]=a[j+1];
    }
не не в в этом кону быть съеденным попкорнУ.
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.01.2018, 17:38 9
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
#include <iostream> 
using namespace std;
 
int main()
{
    int i, N;
    cout << "Enter N: "; cin >> N; 
    double *A = new double [N];
    double *C = new double [N];    
    for (i = 1; i <= N; i++) {
    cout <<"A"<<i<<"="; cin >> A[i]; 
    }
    for (i = 1; i <= N/2; i++)  
    {    
    C[i]=A[2*i];
    C[N/2+i]=A[2*i-1];    
    }     
    if (N%2!=0) C[N]=A[N];    
    for (i = 1; i <= N; i++)    
    cout << C[i] << " ";   
    delete [] A;
    delete [] C;
    system("pause");
    return 0;
}
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
20.01.2018, 18:35 10
Цитата Сообщение от Yetty Посмотреть сообщение
double *A = new double [N];
* * double *C = new double [N];
........
if (N%2!=0) C[N]=A[N]; // Залез в чужую память
...
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.01.2018, 19:36 11
Байт, при объявлении нужно исправить на
C++
1
2
double *A = new double [N+1];
double *C = new double [N+1];
Вы про это?
0
Диссидент
Эксперт C
27706 / 17322 / 3812
Регистрация: 24.12.2010
Сообщений: 38,979
21.01.2018, 12:50 12
Цитата Сообщение от Yetty Посмотреть сообщение
Вы про это?
Да. Вообще, подробно ваш код не смотрел. Но эта ошибочка сразу бросилась в глаза...
0
21.01.2018, 12:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.01.2018, 12:50
Помогаю со студенческими работами здесь

В первый массив включить элементы исходного массива с четными номерами, а во второй – с нечетными
Задан массив с количеством элементов N. Сформировать два массива: в первый включить элементы...

В первый массив включить элементы исходного массива с четными номерами, а во второй – с нечетными
1) задан массив а размерности n. сформируйте два массива в и с: в первый включить элементы...

Переписать в новый массив B вначале все элементы с четными номерами, а затем — с нечетными
Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B того же размера...

Переписать в новый целочисленный массив того же размера вначале все элементы с четными номерами, а затем - с нечетными
Дан целочисленный массив A размера N. Переписать в новый целочисленный массив B того же размера...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru