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

Заменить каждое число массива на расположене справа и большее заменяемого - C++

Восстановить пароль Регистрация
 
_Tanechka_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 48
09.10.2012, 22:32     Заменить каждое число массива на расположене справа и большее заменяемого #1
Здравствуйте!
Помогите, пожалуйста, соствить алгоритм для массива
В массиве нужно заменить каждое число на другое, которое расположено справа и больше заменяемого. В противном случае заменить на ноль. т.е. если было -4 5 8 0 1 , нужно получить 8 8 0 1 0
очень нужна помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 22:32     Заменить каждое число массива на расположене справа и большее заменяемого
Посмотрите здесь:

Заменить каждый элемент массива на среднее арифметическое его и его соседей слева и справа C++
В массиве каждое число заменить на большее справа C++
C++ Задача на if (Если A<=B<=C<=D, то каждое число заменить наибольшим из них...)
Посчитать сколько двоичных единиц содержит каждое число массива. C++
Даны действительные числа A, B, C, D. Каждое число заменить наибольшим из них, если выполняется условие C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.10.2012, 22:36     Заменить каждое число массива на расположене справа и большее заменяемого #2
_Tanechka_, -4 5 8 0 1
Здесь 5 больше -4 и находится справа от него. Так почему мы не на него заменяем? Тогда должно получиться что-то типа 5 8 0 1 0.
_Tanechka_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 48
09.10.2012, 22:45  [ТС]     Заменить каждое число массива на расположене справа и большее заменяемого #3
BumerangSP, неа... 8 8 0 1 0 должно быть)
это я не совсем правильно условие сформулировала..
ближайшее большее по значению расположенное справа, если так можно сказать...
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.10.2012, 22:48     Заменить каждое число массива на расположене справа и большее заменяемого #4
_Tanechka_, может, ближайшее наибольшее тогда? Т.е самое большое из всех.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
09.10.2012, 22:51     Заменить каждое число массива на расположене справа и большее заменяемого #5
В любом случае тут нет ничего сложного. Все можно свести к примерно такому коду:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    int arr[6] = {-4, 5, 8, 0, 1, 4};
    for (int i = 0; i<5; i++)
    {
        if (arr[i+1]>arr[i]) swap(arr[i+1], arr[i]);
        else arr[i] = 0;
        cout<<arr[i]<<" ";
    }
    system("pause");
    return 0;
}
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
09.10.2012, 22:53     Заменить каждое число массива на расположене справа и большее заменяемого #6
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
#include <iostream>
#include <algorithm>
 
const int N = 10;
 
int getRand(void) { return rand() % 10; }
 
int main(void)
{
    setlocale(LC_ALL, "Russian");
 
    int Array[N];
    std::generate(Array, Array + N, getRand);
    std::cout << "Исходный массив: ";
    std::copy(Array, Array + N, std::ostream_iterator<int>(std::cout, " "));
 
    int slip = 0;
    while (slip < N)
    {
        int * Max = std::max_element(Array + slip, Array + N);
        std::fill(Array + slip, Max, *Max);
        slip = std::distance(Array, Max) + 1;
        *Max = 0;
    }
    std::cout << '\n' << "Преобразованный массив: ";
    std::copy(Array, Array + N, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    system("pause");
    return 0;
}
_Tanechka_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 48
09.10.2012, 23:09  [ТС]     Заменить каждое число массива на расположене справа и большее заменяемого #7
BumerangSP, мои великие слова были заменены банальными, ну что ж... можно и так

Добавлено через 9 минут
yuron_477, спасибо, но не совсем так...
ваша программа выводит 5 8 0 1 4, а должна 8 8 0 4 4 0

Добавлено через 4 минуты
John Prick, у меня не компилируется ваш код
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
09.10.2012, 23:12     Заменить каждое число массива на расположене справа и большее заменяемого #8
Цитата Сообщение от _Tanechka_ Посмотреть сообщение
John Prick, у меня не компилируется ваш код
Что пишет? В какой среде работаете?
_Tanechka_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 48
09.10.2012, 23:17  [ТС]     Заменить каждое число массива на расположене справа и большее заменяемого #9
John Prick, Visual C++
вот что говорит....
1>------ Построение начато: проект: t_3_1, Конфигурация: Debug Win32 ------
1>Построение начато 09.10.2012 22:07:47.
1>InitializeBuildStatus:
1> Обращение к "Debug\t_3_1.unsuccessfulbuild".
1>ClCompile:
1> Z_1.cpp
1>c:\users\admin\desktop\t_3_1\t_3_1\z_1.cpp(16): error C2039: ostream_iterator: не является членом "std"
1>c:\users\admin\desktop\t_3_1\t_3_1\z_1.cpp(16): error C2065: ostream_iterator: необъявленный идентификатор
1>c:\users\admin\desktop\t_3_1\t_3_1\z_1.cpp(16): error C2062: тип "int" не требуется
1>c:\users\admin\desktop\t_3_1\t_3_1\z_1.cpp(27): error C2039: ostream_iterator: не является членом "std"
1>c:\users\admin\desktop\t_3_1\t_3_1\z_1.cpp(27): error C2065: ostream_iterator: необъявленный идентификатор
1>c:\users\admin\desktop\t_3_1\t_3_1\z_1.cpp(27): error C2062: тип "int" не требуется
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:00.84
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
09.10.2012, 23:22     Заменить каждое число массива на расположене справа и большее заменяемого #10
Странно конечно, но попробуйте подключить файл
C++
1
#include <iterator>
Если не поможет, замените так:
C++
1
2
3
4
std::copy(Array, Array + N, std::ostream_iterator<int>(std::cout, " ")); // уберите
// вместо этого вставьте
for (int i = 0; i < N; ++i)
   std::cout << Array[i] << " ";
_Tanechka_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 48
09.10.2012, 23:26  [ТС]     Заменить каждое число массива на расположене справа и большее заменяемого #11
John Prick, работает!!!!! большое-большое спасибо, вы меня очень выручили)
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.10.2012, 23:27     Заменить каждое число массива на расположене справа и большее заменяемого #12
На всякий случай без 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
#include <iostream>
#include <ctime>
int main(void)
{
 srand(time(NULL));
 const int n = 10; //размер массива   
 int* a = new int [n];
 int m=0;
 for (int i=0; i<n; i++)
   std::cout<<(a[i]=rand()%11)<<" ";
 for (int i=0; i<n; i++)
  { 
    int m=i;
    for (int j=i+1; j<n; j++) 
    if (a[i]<a[j])
     {
      a[i]=a[j];
       m=j; 
     }
      if (i==m)
       a[m]=0;    
  } 
 std::cout<<std::endl;
 for (int i=0; i<n; i++)
   std::cout<<a[i]<<" "; 
 system("pause");
 return 0;
}
_Tanechka_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 48
09.10.2012, 23:31  [ТС]     Заменить каждое число массива на расположене справа и большее заменяемого #13
BumerangSP, и вам огромное спасибо!
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
09.10.2012, 23:34     Заменить каждое число массива на расположене справа и большее заменяемого #14
_Tanechka_, ну если вам это всё преподу какому показывать, то возможно вариант без использования стандартной библиотеки (это те функции, которые начинаются с std:: ) вам подойдёт лучше. Обычно преподы хотят, чтобы "всё сделал сам", а тут половину работы за вас сделала стандартная библиотека
_Tanechka_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 48
10.10.2012, 00:01  [ТС]     Заменить каждое число массива на расположене справа и большее заменяемого #15
BumerangSP, а если ближайшее большее?
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.10.2012, 00:48     Заменить каждое число массива на расположене справа и большее заменяемого #16
_Tanechka_, ? Если наибольшее на первом месте? Оно 0 будет равно по условию
_Tanechka_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 48
10.10.2012, 01:51  [ТС]     Заменить каждое число массива на расположене справа и большее заменяемого #17
BumerangSP, ну так это понятно
я имела ввиду как изменить цикл, чтобы чило менялось не на наибольшее справа, а просто на большее... ой, ну скоро я кажется совсем запутаюсь...
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
10.10.2012, 08:10     Заменить каждое число массива на расположене справа и большее заменяемого #18
_Tanechka_, мда, Вы и меня запутали В общем, нужно как в том моем примере?
-4 5 8 0 1
5 8 0 1 0
После 18 строки в моем коде в цикле допишите break;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2012, 11:16     Заменить каждое число массива на расположене справа и большее заменяемого
Еще ссылки по теме:

C++ В строке заменить каждое число соответственным текстом
Нужно, чтобы каждое записанное число записывалось в файл, каждое с новой строки C++
C++ Разбить строку на слова и заменить каждое на соответствующее ему число

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

Или воспользуйтесь поиском по форуму:
_Tanechka_
0 / 0 / 0
Регистрация: 17.09.2012
Сообщений: 48
10.10.2012, 11:16  [ТС]     Заменить каждое число массива на расположене справа и большее заменяемого #19
BumerangSP, всё! поняла спасибо еще раз!
Yandex
Объявления
10.10.2012, 11:16     Заменить каждое число массива на расположене справа и большее заменяемого
Ответ Создать тему
Опции темы

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