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

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

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

В упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность C++
Разделить массив на две половины так, чтобы сумма значений элементов были максимально близки C++
C++ Объединить эти массивы так, чтобы результирующий целочисленный массив D (размера NA + NB + NC) остался упорядоченным по убыванию.
Дано 2-ух-значное число. Сделать так, чтоб программа преобразовала это число в новое число кол-во десятков C++
C++ Вставить в одномерный массив А, упорядоченный по возрастанию, новый элемент Б, сохраняя упорядоченность.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
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;
}
Код кривой, но вроде, всё же, работает
kventin_zhuk
БНТУ ФИТР
 Аватар для kventin_zhuk
214 / 154 / 15
Регистрация: 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;
     }
    
}
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
24.06.2013, 23:39     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #4
@kventin_zhuk, Я думал, что объявляем массив в n элементов, а заполняем не все. Я видел, так много где делается

Добавлено через 7 минут
точнее объявляем в 20 элементов массив, а заполняем только n<20
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
25.06.2013, 00:31     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #5
@Denis123456789, Это можно считать условно верно для демонстрации фрагментов кода.Для программ это не верно так как память выделена под ваш указанный размер.Указывая меньше память будет расходоваться впустую.К тому же в этих ячейках лежит "мусор" и если вы выйдите за пределы то и получите "мусор".
Euro3030
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 9
25.06.2013, 15:00  [ТС]     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #6
Спасибо вам большое за помощь))
Nikitko_Cent
128 / 98 / 8
Регистрация: 27.10.2011
Сообщений: 629
Завершенные тесты: 2
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] << " ";
};
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
18.09.2013, 16:46     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #8
Цитата Сообщение от Euro3030 Посмотреть сообщение
В массив Х(N), N≤20, упорядоченный по убыванию значений элементов,
добавить новое число так, чтобы не нарушить упорядоченность.
Суть задачи сводится к тому, что надо пройтись по массиву, найти два элемента, один из которых больше, второй меньше вводимого и... Тут дальше непонятно: если массив вставить в середину массива значение, то куда денется крайнее? Выкинуть его? Или размер массива надо будет увеличивать?
Sue405090
5 / 5 / 1
Регистрация: 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;
    }
 
}
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
18.09.2013, 17:04     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #10
Цитата Сообщение от Sue405090 Посмотреть сообщение
if(x[i]>a && x[i+1]<a)
зачем 2 условия, он уже сортированный
Sue405090
5 / 5 / 1
Регистрация: 15.08.2013
Сообщений: 90
18.09.2013, 17:08     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #11
чтоб определить что это последний элемент который больше, если поставить условие больше то и первый элемент будет больше.... можно
C++
1
2
if(x[i]<a)
index= i-1;
Euro3030
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 9
18.09.2013, 22:47  [ТС]     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #12
Ещё есть какие либо варианты?
D3fend0r
17 / 17 / 1
Регистрация: 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);
}
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5549 / 2563 / 233
Регистрация: 01.11.2011
Сообщений: 6,337
Завершенные тесты: 1
19.09.2013, 09:13     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #14
Цитата Сообщение от Sue405090 Посмотреть сообщение
найдем индекс места вставки
Цитата Сообщение от D3fend0r Посмотреть сообщение
вот например
Это все хорошо, но
Цитата Сообщение от Euro3030 Посмотреть сообщение
добавить новое число
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2013, 10:10     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Sue405090
5 / 5 / 1
Регистрация: 15.08.2013
Сообщений: 90
19.09.2013, 10:10     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #15
вставка зависит от условий... если у тебя массив 20 эл. и тебе нужно вставить 21 тут или увеличивать размер массива или удалить последний элемент... но в любом случаи нужно использовать 2 массива. логика примерна такая копируешь во второй массив числа после нужного индекса, вставляешь нужное число, и копируешь оставшиеся обратно в этом случаи размер массива не изменится... если нужно увеличить массив то новый больше на 1 чем имеющийся и туда копируешь сначала числа до нужного индекса, потом вставляешь новый эл. и копируешь остальные....

с кодом уж сам разберешься/// там только циклы с присвоением...
Yandex
Объявления
19.09.2013, 10:10     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность
Ответ Создать тему
Опции темы

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