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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
Euro3030
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 9
#1

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

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

Имеется задача. В массив Х(N), N≤20, упорядоченный по убыванию значений элементов,
добавить новое число так, чтобы не нарушить упорядоченность.
Пожалуйста помогите решить!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.06.2013, 22:20     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность
Посмотрите здесь:
C++ Вставить в упорядоченный по неубыванию список элемент с заданным значением так, чтобы не нарушить упорядоченность
Добавить элемент в упорядоченный список так, чтобы его упорядоченность не нарушалась C++
В упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность C++
В упорядоченный массив вставить заданное число, сохранив упорядоченность, и удалить последний элемент C++
C++ Описать функцию, которая включает в упорядоченный по убыванию список новое значение
Разделить массив на две половины так, чтобы сумма значений элементов были максимально близки 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
БНТУ ФИТР
215 / 155 / 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
366 / 213 / 41
Регистрация: 26.12.2012
Сообщений: 707
25.06.2013, 00:31     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #5
@Denis123456789, Это можно считать условно верно для демонстрации фрагментов кода.Для программ это не верно так как память выделена под ваш указанный размер.Указывая меньше память будет расходоваться впустую.К тому же в этих ячейках лежит "мусор" и если вы выйдите за пределы то и получите "мусор".
Euro3030
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 9
25.06.2013, 15:00  [ТС]     В массив, упорядоченный по убыванию значений элементов, добавить новое число так, чтобы не нарушить упорядоченность #6
Спасибо вам большое за помощь))
Nikitko_Cent
136 / 106 / 10
Регистрация: 27.10.2011
Сообщений: 660
Завершенные тесты: 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
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 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
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 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
Супер-модератор
Эксперт С++
5602 / 2636 / 242
Регистрация: 01.11.2011
Сообщений: 6,495
Завершенные тесты: 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++ Объединить массивы так, чтобы результирующий массив остался упорядоченным по возрастанию (убыванию)
Слить вектора в один вектор {z},i=1,...20 так, чтобы сохранилась упорядоченность C++
C++ Объединить эти массивы так, чтобы результирующий целочисленный массив D (размера NA + NB + NC) остался упорядоченным по убыванию.

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

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

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

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