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

Массив - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.56
Garret192
 Аватар для Garret192
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
18.02.2010, 20:18     Массив #1
Привет всем.Помогите пожалуйста решить задачу.
Дан массив. Найти 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++ с клавиатуры ввести массив,во второй массив записать нечетные элементы из первого
Можно ли в классе создавать массив переменной длинны. Например динамический массив? C++
Дан массив А(4,4). Сформировать массив В(4) из среднеарифметических значений элементов в каждой строке. C++
Переписать положительные элементы массива K,кратные пяти в массив M,а остальные-в массив Q. C++
C++ Файл: Загрузка данных из файла: первый столбец записывался в 1й массив, второй столбец - во 2й массив, а 3й столбец - в 3й массив.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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++ Массив: Переместить в массив Y все числа, дробная часть которых больше 5.
C++ Дан массив. Записать во второй массив все элементы, не совпадающие с минимальным
Сжать массив, выбросив из него отрицательные элементы - массив становится пустым C++

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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 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     Массив
Ответ Создать тему
Опции темы

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