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

В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность

24.06.2013, 22:20. Просмотров 2048. Ответов 14
Метки нет (Все метки)

Имеется задача. В массив Х(N), N≤20, упорядоченный по убыванию значений элементов,
добавить новое число так, чтобы не нарушить упорядоченность.
Пожалуйста помогите решить!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 22:20
Ответы с готовыми решениями:

Вставить в упорядоченный по неубыванию список элемент с заданным значением так, чтобы не нарушить упорядоченность
Кто сможет помочь с программкой. Вставить в упорядоченный по неубыванию список...

Вставить в массив 2 числа так, что бы не нарушить упорядоченность элементов
Как это решить? "Данный, отсортированный по убыванию значений, массив целых...

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

В упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность
Ребята, есть задача, условие такое: в упорядоченный массив включить новый...

В упорядоченный массив вставить заданное число, сохранив упорядоченность, и удалить последний элемент
в упорядоченном по не возрастанию массиве вставить заданное число так чтобы...

14
Denis123456789
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
24.06.2013, 22:53 2
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>
using namespace std;
const int  n=5;
int main()
{
    int massiv [20];
    int pos; // позиция, на которую надо добавить
    pos=n;
    for (int i=0; i<n;i++)
        cin>> massiv[i];
    int a;//добавляемое число
    cin>>a;
    for (int i=0;i<n;i++)
    {
        if (massiv[i]<a)
            {
                pos=i;
                break;
        }
    }
    for (int i=n;i>=pos;i--)
    massiv[i+1]=massiv[i];
    massiv[pos]=a;
    for (int i=0;i<n+1;i++)
        cout<<massiv[i]<<" ";
    return 0;
}
Код кривой, но вроде, всё же, работает
0
kventin_zhuk
БНТУ ФИТР
215 / 155 / 41
Регистрация: 26.12.2012
Сообщений: 382
24.06.2013, 23:20 3
@Denis123456789, Не совсем понял вашу идею. Если массив статический - то он как ни крути был и будет N элементов. И N + 1 из него не сделать. А вообще как-то так. Не проверял, мысли вслух:
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
int *massiv = new int [SIZE];
 
for (int i = 1;i < n - 1;i++)
{
     if (massiv[i - 1] < a && massiv[i + 1] >= a)
     {
           int *newArr = new int [SIZE + 1];
 
           for (int j = 0; j < i - 1; j++)
       {
                 newArr[j] = massiv[j];
           }
         
           newArr[i] = a;         
 
           for (int j = i  + 1; j < n; j++)
       {
        newArr[j] = mass[j - 1];
           }
           delete [] massiv;
       massiv = newArray;   
           break;
     }
    
}
0
Denis123456789
43 / 43 / 21
Регистрация: 02.06.2013
Сообщений: 181
24.06.2013, 23:39 4
@kventin_zhuk, Я думал, что объявляем массив в n элементов, а заполняем не все. Я видел, так много где делается

Добавлено через 7 минут
точнее объявляем в 20 элементов массив, а заполняем только n<20
0
Genn55
378 / 225 / 108
Регистрация: 26.12.2012
Сообщений: 744
25.06.2013, 00:31 5
@Denis123456789, Это можно считать условно верно для демонстрации фрагментов кода.Для программ это не верно так как память выделена под ваш указанный размер.Указывая меньше память будет расходоваться впустую.К тому же в этих ячейках лежит "мусор" и если вы выйдите за пределы то и получите "мусор".
0
Euro3030
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 9
25.06.2013, 15:00  [ТС] 6
Спасибо вам большое за помощь))
0
Nikitko_Cent
144 / 114 / 37
Регистрация: 27.10.2011
Сообщений: 690
Завершенные тесты: 3
18.09.2013, 16:38 7
Если в качестве массива используешь вектор - то все просто :

C++
1
x.push_back(x[x.size()-1]-1);
Вывод массива :

C++
1
2
3
4
for(int i = 0; i<x.size(); i++)
{
  std::cout << x[i] << " ";
};
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
18.09.2013, 16:46 8
Цитата Сообщение от Euro3030 Посмотреть сообщение
В массив Х(N), N≤20, упорядоченный по убыванию значений элементов,
добавить новое число так, чтобы не нарушить упорядоченность.
Суть задачи сводится к тому, что надо пройтись по массиву, найти два элемента, один из которых больше, второй меньше вводимого и... Тут дальше непонятно: если массив вставить в середину массива значение, то куда денется крайнее? Выкинуть его? Или размер массива надо будет увеличивать?
0
Sue405090
5 / 5 / 5
Регистрация: 15.08.2013
Сообщений: 90
18.09.2013, 16:58 9
// найдем индекс места вставки
C++
1
2
3
4
5
6
7
8
9
for(int i = 0; i<x.size(); i++)
{
   if(x[i]>a && x[i+1]<a)
   {  
      index=i;// индекс элемента после которого нужно  вставить
      break;
    }
 
}
0
Raali
639 / 343 / 74
Регистрация: 06.07.2013
Сообщений: 1,107
Завершенные тесты: 1
18.09.2013, 17:04 10
Цитата Сообщение от Sue405090 Посмотреть сообщение
if(x[i]>a && x[i+1]<a)
зачем 2 условия, он уже сортированный
0
Sue405090
5 / 5 / 5
Регистрация: 15.08.2013
Сообщений: 90
18.09.2013, 17:08 11
чтоб определить что это последний элемент который больше, если поставить условие больше то и первый элемент будет больше.... можно
C++
1
2
if(x[i]<a)
index= i-1;
0
Euro3030
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 9
18.09.2013, 22:47  [ТС] 12
Ещё есть какие либо варианты?
0
D3fend0r
18 / 18 / 13
Регистрация: 14.09.2013
Сообщений: 37
19.09.2013, 00:43 13
вот например, чуть быстрее работает,чем проверка всех элементов, но для массива с количеством элементов не более 20 это не существенно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int GetIndex(vector<int> &ver,int size,int x)
{
    int start=0,end=size-1;
    while((end-start)!=1)
    {
        int i=(start+end)/2;
        if(ver[i]<x)
        {
            end=i;
        }
        else
        {
            start=i;
        }
    }
    return(start+1);
}
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
19.09.2013, 09:13 14
Цитата Сообщение от Sue405090 Посмотреть сообщение
найдем индекс места вставки
Цитата Сообщение от D3fend0r Посмотреть сообщение
вот например
Это все хорошо, но
Цитата Сообщение от Euro3030 Посмотреть сообщение
добавить новое число
0
Sue405090
5 / 5 / 5
Регистрация: 15.08.2013
Сообщений: 90
19.09.2013, 10:10 15
вставка зависит от условий... если у тебя массив 20 эл. и тебе нужно вставить 21 тут или увеличивать размер массива или удалить последний элемент... но в любом случаи нужно использовать 2 массива. логика примерна такая копируешь во второй массив числа после нужного индекса, вставляешь нужное число, и копируешь оставшиеся обратно в этом случаи размер массива не изменится... если нужно увеличить массив то новый больше на 1 чем имеющийся и туда копируешь сначала числа до нужного индекса, потом вставляешь новый эл. и копируешь остальные....

с кодом уж сам разберешься/// там только циклы с присвоением...
1
19.09.2013, 10:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2013, 10:10

Описать функцию, которая включает в упорядоченный по убыванию список новое значение
Помогите плиз с задачкой. Динамические структуры. С++ В составе программы...

Разделить массив на две половины так, чтобы сумма значений элементов были максимально близки
Здравствуйте!!! :help::help:Помогите мне ... :help::help:У меня ЗАВТРА...

Вставить в одномерный массив А, упорядоченный по возрастанию, новый элемент Б, сохраняя упорядоченность.
Прошу помочь решить задачки!:(очень нужно (Билет №19) Вставить в одномерный...


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

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

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