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

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

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

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

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

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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;
}
Код кривой, но вроде, всё же, работает
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;
     }
    
}
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
24.06.2013, 23:39 #4
@kventin_zhuk, Я думал, что объявляем массив в n элементов, а заполняем не все. Я видел, так много где делается

Добавлено через 7 минут
точнее объявляем в 20 элементов массив, а заполняем только n<20
0
Genn55
367 / 214 / 41
Регистрация: 26.12.2012
Сообщений: 708
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
136 / 106 / 11
Регистрация: 27.10.2011
Сообщений: 665
Завершенные тесты: 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] << " ";
};
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
18.09.2013, 16:46 #8
Цитата Сообщение от Euro3030 Посмотреть сообщение
В массив Х(N), N≤20, упорядоченный по убыванию значений элементов,
добавить новое число так, чтобы не нарушить упорядоченность.
Суть задачи сводится к тому, что надо пройтись по массиву, найти два элемента, один из которых больше, второй меньше вводимого и... Тут дальше непонятно: если массив вставить в середину массива значение, то куда денется крайнее? Выкинуть его? Или размер массива надо будет увеличивать?
0
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;
    }
 
}
0
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 1
18.09.2013, 17:04 #10
Цитата Сообщение от Sue405090 Посмотреть сообщение
if(x[i]>a && x[i+1]<a)
зачем 2 условия, он уже сортированный
0
Sue405090
5 / 5 / 1
Регистрация: 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
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);
}
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
19.09.2013, 09:13 #14
Цитата Сообщение от Sue405090 Посмотреть сообщение
найдем индекс места вставки
Цитата Сообщение от D3fend0r Посмотреть сообщение
вот например
Это все хорошо, но
Цитата Сообщение от Euro3030 Посмотреть сообщение
добавить новое число
0
Sue405090
5 / 5 / 1
Регистрация: 15.08.2013
Сообщений: 90
19.09.2013, 10:10 #15
вставка зависит от условий... если у тебя массив 20 эл. и тебе нужно вставить 21 тут или увеличивать размер массива или удалить последний элемент... но в любом случаи нужно использовать 2 массива. логика примерна такая копируешь во второй массив числа после нужного индекса, вставляешь нужное число, и копируешь оставшиеся обратно в этом случаи размер массива не изменится... если нужно увеличить массив то новый больше на 1 чем имеющийся и туда копируешь сначала числа до нужного индекса, потом вставляешь новый эл. и копируешь остальные....

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

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

Отсортировать массив так, чтобы столбцы матрицы располагались по убыванию их поэлементных сумм - C++
1.В двумерном массиве размерностью 5х5, заполненный случайными числами. Отсортировать массив таким образом, чтобы столбцы матрицы...

Объединить массивы так, чтобы результирующий массив остался упорядоченным по возрастанию (убыванию) - C++
1.53) Даны два одномерных массива A и B размерности n, элементы которых упорядочены по возрастанию (убыванию). Объединить массивы так,...

Слить вектора в один вектор {z},i=1,...20 так, чтобы сохранилась упорядоченность - C++
даны два вектора {x}, {y}, i=1,...10, упорядоченные по возрастанию. слить их в один вектор {z},i=1,...20 так, чтобы сохранилась...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.09.2013, 10:10
Ответ Создать тему
Опции темы

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