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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Garret192
 Аватар для Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
#1

Массив - C++

18.02.2010, 20:18. Просмотров 1072. Ответов 22
Метки нет (Все метки)

Привет всем.Помогите пожалуйста решить задачу.
Дан массив. Найти k наименьших элементов.
Т.е с клавы вводится k и если в массиве
3 4 76 4 2 4
k=3
То выведется 3 4 4 2 4
P.S.. Выводить числа в той же последовательности в которой они были в массиве.
P.P.S. Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2010, 20:18     Массив
Посмотрите здесь:

C++ Как массив разнозначных чисел превратить в массив цифр? (С++)
Как разбить массив по 3 елемента и засунуть в другой массив C++
C++ Необходимо вывести на экран первоначальный массив и полученый массив
C++ Массив: Получить новый массив В по следующему правилу: В1=А1+А10
Массив: Упорядочить массив по возрастанию меньших элементов C++
C++ Массив: отсортировать массив в порядке возрастания и найти количество соседних пар элементов отличающихся между собой
Дан массив A(N). Сформулировать массив B(M), элементами которого являются большие из двух рядом стоящих в массиве A чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4661 / 2487 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.02.2010, 21:35     Массив #21
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for(i=0; i<n; i++)// в этой строке и в двух ниже ищем самый минимальный элемент массива, значение которого запишем в переменную min
if(min>mas[i])
min=mas[i];
while(kol_min<k && fl) начинаем цикл, который закончится когда fl станет равным нулю или переменная kol_min (сейчас эта переменная равна 1) станет равной k (сейчас она равна 3) - т.е. когда вычислим три самых минимальных элемента
{
fl1=0;
fl=0;
for(i=0; i<n; i++)// в этой строчке и семи ниже ищем первый попавшийся элемент массива, который больше min, если такого не найдем, то fl останется равной 0 и мы выйдем из цикла
{
if(!fl1 && mas[i]>min)
{
fl1=1;
temp=mas[i];
fl=1;
}
if(fl && temp>mas[i] && mas[i]>min)// в этой строке и двумя строчками ниже ищем минимальный элемент в массиве, но который больше значения в min, найденное значение записываем в temp
temp=mas[i];
}
kol_min++;// увеличиваем переменную на 1
min=temp;// присваиваем min значение temp
}
По окончании этого цикла в переменной min находится самое большое из минимальных значений которые нужно вывести на экран. Остается дело за малым...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Garret192
 Аватар для Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
21.02.2010, 23:07  [ТС]     Массив #22
valeriikozlov, Спасибо большое.И если трудно не мог бы ты помочь мне дорешать программу.
Эта программа является подпрограммой к мой задаче. Хотел оставшееся дорешать сам но уже сижу часа 3,5 но не получается нормально оптимизовать и закончить,получается что-то для частных случаев. Если не впадлу вот задача.
Дан массив. Найти k наименьших элементов,и вставить их после первого максимального элемента массива.

Добавлено через 40 секунд
valeriikozlov, Спасибо большое.И если не трудно не мог бы ты помочь мне дорешать программу.
Эта программа является подпрограммой к мой задаче. Хотел оставшееся дорешать сам но уже сижу часа 3,5 но не получается нормально оптимизовать и закончить,получается что-то для частных случаев. Если не впадлу вот задача.
Дан массив. Найти k наименьших элементов,и вставить их после первого максимального элемента массива.[/QUOTE]
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2010, 07:33     Массив
Еще ссылки по теме:

Задан массив и матрица, получить другой массив по правилу C++
Первую половину массива P переписать в массив R, а вторую в массив Q C++
C++ Нужно в массив А записать числители, а в массив В знаменатели
C++ Массив: Задать радномно массив чисел (натуральных) от 0 до 10.
Записать в массив B длины всех серий исходного массива, а в массив C - значения элементов, образующих серии C++

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4661 / 2487 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
22.02.2010, 07:33     Массив #23
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <iostream>
#include <process.h>
using namespace std;
int main ()
{
    int k, i, j, kol_min=1, min, fl=1, temp, fl1, *mas, n, *mas_min, i_min, i_max;
    cout<<"Vvod kol-vo elementov massiva: ";
    cin>>n;   
    mas=new int[n];
    for(i=0; i<n; i++)
    {
        cout<<"Vvod ["<<i<<"]= ";
        cin>>mas[i];
    }
    cout<<"Vvod znacheniy k:";
    cin>>k;    
        min=mas[0];
        for(i=0; i<n; i++)
                if(min>mas[i])
                        min=mas[i];
        while(kol_min<k && fl)
        {
                fl1=0;
                fl=0;
                for(i=0; i<n; i++)
                {
                        if(!fl1 && mas[i]>min)
                        {
                                fl1=1;
                                temp=mas[i];
                                fl=1;
                        }
                        if(fl && temp>mas[i] && mas[i]>min)
                                temp=mas[i];
                }
                kol_min++;
                min=temp;
        }
        if(!fl)
        {
                cout<<"Stolko minimalnih elementov net"<<endl;
                exit(1);
        }
        kol_min=0;
        i_max=0;
        for(i=0; i<n; i++)
        {
           if(mas[i]<=min)
               kol_min++;
           if(mas[i]>mas[i_max])
               i_max=i;
        }
        mas_min=new int[kol_min];
        i_min=0;
        for(i=0; i<n; i++)
           if(mas[i]<=min)
           {
               mas_min[i_min]=mas[i];
               i_min++;
           }
        temp=i_max;
        for(i=0; i<temp; i++)
            if(mas[i]<=min)
            {
                for(j=i; j<temp; j++)
                    mas[j]=mas[j+1];
                temp--;
                i--;
            }
        for(i=n-1; i>i_max; i--)
            if(mas[i]<=min)
            {
                for(j=i; j>i_max; j--)
                    mas[j]=mas[j-1];
                i++;    
            }
        for(i=0; i<kol_min; i++)
            mas[temp+1+i]=mas_min[i];
        cout<<"Itogovi massiv: "<<endl;
        for(i=0; i<n; i++)
            cout<<mas[i]<<"  ";
        cout<<endl; 
    return 0; 
}
Yandex
Объявления
22.02.2010, 07:33     Массив
Ответ Создать тему
Опции темы

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