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

Найти минимальный элемент заданного массива и заменить им чётные по номеру элементы

25.10.2016, 19:22. Просмотров 1363. Ответов 10
Метки нет (Все метки)

Доброго времени суток, вот условие задачи: Найти минимальный элемент массива Т и заменить им четные по номеру элементы.
Никак не могу адекватно заменить чётные по номеру элементы на min, прошу помощи. И ещё прошу дать совет по написанию кода, чует моё сердечко, что всё это можно было бы написать в разы легче.
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    int i, n, t[100], min;
    cout << "Введите размерность массива(не более 100): " << endl;
    cin >> n;
    cout << "Элементы массива до замены: " << endl;
    for (i = 0; i <= n; i++)
    {
        t[i] = rand() % n + 1;
        cout << t[i] << endl;
    }
    min = t[0];
    for (int i = 0; i < n; i++)
    {
        if (t[i] < min)
        {
            min = t[i];
            cout << "Минимальный элемент массива: " << min << endl;
        }
    }
    cout << "После: " << endl;
    for (i = 0; i < n; i++) 
    {   
        if (i % 2 == 0) 
        { 
            t[i] = min;
        }
        cout << t[i] << endl;
    }
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.10.2016, 19:22
Ответы с готовыми решениями:

Найти сумму элементов, кратных заданному; найти минимальный элемент; все чётные элементы заменить на максимальный (STL)
Используя контейнеры и алгоритмы стандартной библиотеки шаблонов, решить следующие задачи...

Найти минимальный положительный элемент массива, все элементы, начинающиеся с цифры 1, заменить на обратные
найти минимальный положительный элемент массива, все элементы начинающиеся с цифры 1 заменить на их...

Заменить все элементы массива, меньшие 5, на его минимальный элемент
Дан одномерный массив вещественных чисел. Написать программу, которая заменяет все элементы...

Найти минимальный элемент заданного одномерного массива
Найти минимальный элемент массива А .

Упорядочить чётные по номеру элементы всего массива по возрастанию квадратов значений
Упорядочить чётные по номеру элементы всего массива по возрастанию квадратов значений Использовать...

10
sourcerer
Модератор
Эксперт CЭксперт С++
4963 / 2149 / 326
Регистрация: 20.02.2013
Сообщений: 5,582
Записей в блоге: 24
Завершенные тесты: 1
25.10.2016, 19:34 2
droppenheimer, можно так:
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
// Обязательно включи в своей среде разработки поддержку стандарта C++11
 
#include <iostream>
#include <algorithm>
 
int main()
{
    const size_t ARR_SIZE = 11;
    int arr[] { 9, 2, 6, 3, 4, 7, 1, 2, 7, 8, 6 };
 
    for ( const auto & elem : arr )
        std::cout << elem << " ";
 
    int min_elem = *std::min_element( arr, arr + ARR_SIZE );
    for ( size_t i = 0; i < ARR_SIZE; i += 2 )
        arr[i] = min_elem;
 
    std::cout << "\n";
 
    for ( const auto & elem : arr )
        std::cout << elem << " ";
 
    return 0;
}
1
droppenheimer
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 9
25.10.2016, 19:45  [ТС] 3
Замена происходит с нечётными позициями чисел, но с чётными индексами потому что нумерация массивов начинается с нуля?
0
sourcerer
Модератор
Эксперт CЭксперт С++
4963 / 2149 / 326
Регистрация: 20.02.2013
Сообщений: 5,582
Записей в блоге: 24
Завершенные тесты: 1
25.10.2016, 19:49 4
Цитата Сообщение от droppenheimer Посмотреть сообщение
Замена происходит с нечётными позициями чисел, но с чётными индексами потому что нумерация массивов начинается с нуля?
Ну да. А как надо было?

Добавлено через 54 секунды
droppenheimer, так?
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>
#include <algorithm>
 
int main()
{
    const size_t ARR_SIZE = 11;
    int arr[] { 9, 2, 6, 3, 4, 7, 1, 2, 7, 8, 6 };
 
    for ( const auto & elem : arr )
        std::cout << elem << " ";
 
    int min_elem = *std::min_element( arr, arr + ARR_SIZE );
    for ( size_t i = 1; i < ARR_SIZE; i += 2 )
        arr[i] = min_elem;
 
    std::cout << "\n";
 
    for ( const auto & elem : arr )
        std::cout << elem << " ";
 
    return 0;
}
1
25.10.2016, 19:49
droppenheimer
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 9
25.10.2016, 19:49  [ТС] 5
Цитата Сообщение от gru74ik Посмотреть сообщение
Ну да. А как надо было?
Так и надо, для справки спросил. Благодарю!
0
sourcerer
Модератор
Эксперт CЭксперт С++
4963 / 2149 / 326
Регистрация: 20.02.2013
Сообщений: 5,582
Записей в блоге: 24
Завершенные тесты: 1
25.10.2016, 20:10 6
droppenheimer, если не боишься шаблонов, то можно вывод массива на консоль выделить в отдельную шаблонную функцию:
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
#include <iostream>
#include <algorithm>
 
template <class T>
void show( const T & arr )
{
    for ( const auto & elem : arr )
        std::cout << elem << " ";
    std::cout << "\n";
}
 
int main()
{
    const size_t ARR_SIZE = 11;
    int arr[] { 9, 2, 6, 3, 4, 7, 1, 2, 7, 8, 6 };
 
    show( arr );
 
    int min_elem = *std::min_element( arr, arr + ARR_SIZE );
 
    for ( size_t i = 0; i < ARR_SIZE; i += 2 )
        arr[i] = min_elem;
 
    show( arr );
 
    return 0;
}
Добавлено через 11 минут
droppenheimer, предупреждая возможные вопросы:
Цитата Сообщение от gru74ik Посмотреть сообщение
Цитата Сообщение от IchimaruGin Посмотреть сообщение
что это за цикл for?
range-based for (C++11)
Добавлено через 2 минуты
droppenheimer, и вот ещё много полезного про массивы и указатели.
1
droppenheimer
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 9
25.10.2016, 20:12  [ТС] 7
Ух ты, моё почтение!
0
sourcerer
Модератор
Эксперт CЭксперт С++
4963 / 2149 / 326
Регистрация: 20.02.2013
Сообщений: 5,582
Записей в блоге: 24
Завершенные тесты: 1
25.10.2016, 20:38 8
droppenheimer, вообще, можно и без шаблонов (просто тогда придётся два аргумента в функцию show() передавать):
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
#include <iostream>
#include <algorithm>
 
void show( int * arr, const size_t size )
{
    for ( size_t i = 0; i < size; ++i )
        std::cout << arr[i] << " ";
    std::cout << "\n";
}
 
int main()
{
    const size_t ARR_SIZE = 11;
    int arr[] { 9, 2, 6, 3, 4, 7, 1, 2, 7, 8, 6 };
 
    show( arr, ARR_SIZE );
 
    int min_elem = *std::min_element( arr, arr + ARR_SIZE );
 
    for ( size_t i = 0; i < ARR_SIZE; i += 2 )
        arr[i] = min_elem;
 
    show( arr, ARR_SIZE );
 
    return 0;
}
0
sourcerer
Модератор
Эксперт CЭксперт С++
4963 / 2149 / 326
Регистрация: 20.02.2013
Сообщений: 5,582
Записей в блоге: 24
Завершенные тесты: 1
25.10.2016, 20:38 9
droppenheimer, либо с итераторами, в духе 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
#include <iostream>
#include <algorithm>
 
void show( int * arr_begin, int * arr_end )
{
    for ( auto iter = arr_begin; iter != arr_end; ++iter )
        std::cout << *iter << " ";
    std::cout << "\n";
}
 
int main()
{
    const size_t ARR_SIZE = 11;
    int arr[] { 9, 2, 6, 3, 4, 7, 1, 2, 7, 8, 6 };
 
    auto arr_begin = arr;
    auto arr_end = arr + ARR_SIZE;
 
    show( arr_begin, arr_end );
 
    int min_elem = *std::min_element( arr_begin, arr_end );
 
    for ( size_t i = 0; i < ARR_SIZE; i += 2 )
        arr[i] = min_elem;
 
    show( arr_begin, arr_end );
 
    return 0;
}
0
sourcerer
Модератор
Эксперт CЭксперт С++
4963 / 2149 / 326
Регистрация: 20.02.2013
Сообщений: 5,582
Записей в блоге: 24
Завершенные тесты: 1
25.10.2016, 20:38 10
droppenheimer, либо вот ещё такой вариант с лямбда-функцией:
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
#include <iostream>
#include <algorithm>
 
void show( int * arr_begin, int * arr_end )
{
    std::for_each( arr_begin, arr_end, []( int i ){ std::cout << i << " "; } );
    std::cout << "\n";
}
 
int main()
{
    const size_t ARR_SIZE = 11;
    int arr[] { 9, 2, 6, 3, 4, 7, 1, 2, 7, 8, 6 };
 
    auto arr_begin = arr;
    auto arr_end = arr + ARR_SIZE;
 
    show( arr_begin, arr_end );
 
    int min_elem = *std::min_element( arr_begin, arr_end );
 
    for ( size_t i = 0; i < ARR_SIZE; i += 2 )
        arr[i] = min_elem;
 
    show( arr_begin, arr_end );
 
    return 0;
}
P.S. Идея использования алгоритма std::for_each и лямбд для вывода массива на консоль честно стырена у Hikari.
1
droppenheimer
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 9
25.10.2016, 20:46  [ТС] 11
На моём уровне сейчас это довольно сложно, но всё равно спасибо за предложенные варианты!
0
25.10.2016, 20:46
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2016, 20:46

Найти минимальный элемент среди положительных элементов заданного массива
1. найти min среди положительных элементов массива.

Найти минимальный и максимальный элементы заданного массива; найти сумму всех элементов
Дано массив a, найти минимальный и максимальный элемент массива, суму всех элементов массива,...

Найти минимальный элемент массива и заменить все последующие на 1
Даны два одномерных массива a и b. В массивах a и b все элементы, которые следуют за минимальным по...


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

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

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