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

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

Восстановить пароль Регистрация
 
Karinka_01
Сообщений: n/a
23.10.2012, 00:10     В массиве каждое число заменить на большее справа #1
HELP PLEASE!!!!!!!!!!!!
условие такое: в массиве заменить каждое число на другое, расположенное справа (ближайшее к заменяемому) и большее заменяемого. В противном случае заменить на 0.
пример: из 1 -2 8 3 5 получить 8 8 0 5 0
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
#include <fstream>
using namespace std;
 
int main()
{
    int n;
    int * array;
    array = new int[100000];
 
    fstream f;
    f.open("input.txt", ios::in);
    f>>n;
    for(int i = 0; i<n; i++)
        f>>array[i];
    f.close();
 
    int stack[100000];
    int begin = 1; 
    stack[begin-1] = array[n-1];
    array[n-1]=0;
    for(int i = n-2; i>=0; i--)
    {
 
        if(begin!=0)
        {
            for(int j = begin-1; j>=0; j--)
            {
 
                if (array[i]>stack[j])
                    {
                        stack[j]=array[i];
                        begin --;
                }
                
                else if(array[i]<stack[j])
                {
                    stack[j+1] = array[i];
                    array[i] = stack[j];
                    begin ++ ;
                    break;
                }
            }
        }
        else 
        {
            stack[begin-1] = array[i];
            array[i] = 0;
            begin = 1;
        }
        
    }
 
    f.open("output.txt",ios::out);
    for(int i =0; i<n; i++)
    {
        f<<array[i]<<" ";
    }
    f.close();
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2012, 00:10     В массиве каждое число заменить на большее справа
Посмотрите здесь:

Каждое второе число в массиве, которые повторяются более 2 раз, удалить C++
определить количество инверсий в массиве Х т.е таких пар элементов, в которых большее число находится слева от меньшего:Xi>Xj при i<j. C++
C++ Заменить каждое число массива на расположене справа и большее заменяемого
C++ Задача на if (Если A<=B<=C<=D, то каждое число заменить наибольшим из них...)
C++ Использование двухмерных массивов! (дополнить код: показать, сколько раз каждое число используется в массиве )
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
23.10.2012, 00:26     В массиве каждое число заменить на большее справа #2
Karinka_01, задача абсолютно типовая
Вот 2 вариант решени, думаю: разберетесь:
Упростить цикл
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.10.2012, 00:31     В массиве каждое число заменить на большее справа #3
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 <stdio.h>
 
int main()
{
    int a[] = {0, 1, 2, 3, 2, 1, 0};
    int s = 7, i = 0;
 
    while (i < s)
        fprintf(stdout,"%3i", a[i++] );
    putchar('\n');
    i = 0;
 
    while (i < s - 1 ) {
        if (a[ i ] < a[ i + 1 ])
            a[ i ] = a[ i + 1 ];
        else
            a[ i ] = 0;
        ++i;
    }
    i = 0;
 
    while (i < s)
        fprintf(stdout,"%3i", a[i++] );
    putchar('\n');
    getchar();
 
    return 0;
}
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
23.10.2012, 00:33     В массиве каждое число заменить на большее справа #4
alkagolik, вы не поняли, для последовательности
1 -2 8 2 должно быть 8 8 0 ..., а по вашему коду будет 0 8 0 ... Надо найти ближайшее большее справа и все числа левее его еще необработанные должны быть равны ему.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,904
Записей в блоге: 2
Завершенные тесты: 1
23.10.2012, 00:36     В массиве каждое число заменить на большее справа #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
int main(){
    const int n=5;
    int arr[n]={1,-2,8,3,5};
    int temp;
    for (int i=0;i<n;i++){
    temp=arr[i];
        for(int j=i;j<n;j++){
            if (temp<arr[j]){
                arr[i]=arr[j];  break;
            }else{arr[i]=0;}
        }
    }   
    for(int i=0;i<n;i++)
        std::cout<<arr[i]<<"\t";
    std::cout<<std::endl;
    return 0;
}
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
23.10.2012, 00:37     В массиве каждое число заменить на большее справа #6
Croessmah, неправильно, а все потому что не смотрите что написано выше.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,904
Записей в блоге: 2
Завершенные тесты: 1
23.10.2012, 00:41     В массиве каждое число заменить на большее справа #7
Цитата Сообщение от Psilon Посмотреть сообщение
Croessmah, неправильно, а все потому что не смотрите что написано выше.
Исходил из последовательности.
пример: из 1 -2 8 3 5 получить 8 8 0 5 0
Добавлено через 1 минуту
Цитата Сообщение от Karinka_01 Посмотреть сообщение
расположенное справа (ближайшее к заменяемому) и большее заменяемого. В противном случае заменить на 0.
Если брать условие, то сравнивать нужно только с соседом справа, а если из примера, то перебирать нужно все элементы справа.
Поэтому уточните.
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
23.10.2012, 00:41     В массиве каждое число заменить на большее справа #8
Цитата Сообщение от Psilon Посмотреть сообщение
alkagolik, вы не поняли
хех))) моя программа чуть более чем полностью соответствует ТЗ. Тонкости не заботят.

Цитата Сообщение от Karinka_01 Посмотреть сообщение
в массиве заменить каждое число на другое, расположенное справа (ближайшее к заменяемому) и большее заменяемого
Цитата Сообщение от Karinka_01 Посмотреть сообщение
В противном случае заменить на 0
все как по маслу
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,904
Записей в блоге: 2
Завершенные тесты: 1
23.10.2012, 01:00     В массиве каждое число заменить на большее справа #9
Цитата Сообщение от Psilon Посмотреть сообщение
Croessmah, неправильно, а все потому что не смотрите что написано выше.
можно и так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main(){
    const int n=5;
    int arr[n]={1,-2,8,3,5};
    int temp=0;
    for(int i=0;i<n;++i){
        temp=arr[i];arr[i]=0;
        for(int j=i+1;j<n;++j){
            if(temp<arr[j]){
                for(int d=i;d<j;++d)
                    arr[d]=arr[j];
                i=j-1; break;
            }
        }
    }   
    for(int i=0;i<n;i++)
        std::cout<<arr[i]<<"\t";
    std::cout<<std::endl;
    return 0;
}
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
23.10.2012, 01:01     В массиве каждое число заменить на большее справа #10
Croessmah, смотрите мою ссылку. там Это же задание. И там оно уточняется именно таким образом. Если справа существует элемент больший данного, то заменить на него. Если не существует - ноль. Расстояние до этого элемента - любое.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.10.2012, 01:04     В массиве каждое число заменить на большее справа
Еще ссылки по теме:

Даны действительные числа A, B, C, D. Каждое число заменить наибольшим из них, если выполняется условие C++
C++ В строке заменить каждое число соответственным текстом
C++ Разбить строку на слова и заменить каждое на соответствующее ему число

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

Или воспользуйтесь поиском по форуму:
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
23.10.2012, 01:04     В массиве каждое число заменить на большее справа #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <fstream>
int main()
{
    std::ifstream fin("input.txt");
    std::ofstream fout("output.txt");
    int n;
    fin >> n;
    int *a = new int[n];
    for ( int i = 0; i < n; ++i )
        fin >> a[ i ];
    int *s = new int [ n ];
    s[ n - 1 ] = 0;
    for ( int i = n - 2; i >= 0; --i )
        if ( a[ i + 1 ] > a[ i ] )
            s[ i ] = a[ i + 1 ];
        else
            s[ i ] = s[ i + 1 ];
    for ( int i = 0; i < n; ++i )
        fout << s[ i ] << " ";
}
Yandex
Объявления
23.10.2012, 01:04     В массиве каждое число заменить на большее справа
Ответ Создать тему
Опции темы

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