Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
1

Массив

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

Привет всем.Помогите пожалуйста решить задачу.
Дан массив. Найти k наименьших элементов.
Т.е с клавы вводится k и если в массиве
3 4 76 4 2 4
k=3
То выведется 3 4 4 2 4
P.S.. Выводить числа в той же последовательности в которой они были в массиве.
P.P.S. Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.02.2010, 20:18
Ответы с готовыми решениями:

Массив: Преобразовать массив, прибавив к четным числам, входящим в массив, значение первого элемента.
Есть задача С клавиатуры вводятся элементы целочисленного массива размера N. Преобразовать его,...

Ввести массив А. В массив В перенести все элементы массива А, стоящие правее максимального элемента, и имеющие нечетный индекс. Массив В отсортировать
Добрый Вечер! Написал первую часть программы по этому заданию"Ввести массив А. В массив В перенести...

Массив: Как скопировать двумерный массив в другой массив?
Как скопировать двумерный массив в другой массив?

Дан массив целых чисел,произвести для него следующие операции: для каждого из чисел ,входящего в массив,указать,сколько раз оно входит в массив...
помогите!!!((( дан массив целых чисел,произвести для него следующие операции: для каждого из чисел...

22
Эксперт С++
5027 / 2606 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
18.02.2010, 20:49 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
28
29
30
31
32
33
34
35
36
37
38
39
void swap(int &A, int &B)
{
        int t = A;
        A = B;
        B = t;
}
// Сортировка методом пузырька
void sort(int * a, int l, int r)
{
        for(int i = l; i < r; i++)
                for(int j = r; j > i; j--)
                        if(a[j-1] > a[j])
                                swap(a[j-1], a[j]);
}
int main()
{
    const int SIZE = 6;
    int a[] = { 3, 5, 76, 4, 2, 4 };
    int k, c = 0;
    
    cout << "введите k: ";
    cin >> k;
    
    int * t = new int[SIZE];
    memcpy(t, a, SIZE*sizeof(int));
    sort(t, 0, SIZE-1);
    for(int i = 0; i < SIZE && c < k; i++)
        if(t[i] != t[i+1])
            c++;
    c = t[c];
    delete[] t;
    
    for(int i = 0; i < SIZE; i++)
        if(a[i] <= c)
            cout << a[i] << " ";
    
    cout << endl;
    system("pause");
}
1
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
18.02.2010, 21:13  [ТС] 3
Прости а
C++
1
2
3
4
5
6
void swap(int &A, int &B)
{
        int t = A;
        A = B;
        B = t;
}
и
C++
1
2
3
4
5
6
7
void sort(int * a, int l, int r)
{
        for(int i = l; i < r; i++)
                for(int j = r; j > i; j--)
                        if(a[j-1] > a[j])
                                swap(a[j-1], a[j]);
}
это равносильные функции или состовлящие одной программы?
0
Эксперт С++
5027 / 2606 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
18.02.2010, 21:16 4
состовлящие одной программы.
с их помощью массив сортируется по возрастанию, чтобы можно было определить максимальный элемент, который нужно выводить.
1
257 / 144 / 18
Регистрация: 27.12.2009
Сообщений: 909
18.02.2010, 21:50 5
пжди.....те над чтоб были выведены ток числа которые больше или меньше чем k на еденецу?
типа старший младший..... гдет была такая задача тогда, и она проще пишется....

Добавлено через 14 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
const int N1=100;
int i,k,n,a[N1];
system("echo введите количество элементов в массиве");
scanf("%d",&n);
system("echo введите число k");
scanf("%d",&k);
system("echo введите елементы массива");
for(i=0;i<n;i++)
 scanf("%d",&a[i]);
system("echo полученный массив");
 for(i=0;i<n;i++)
  {
  if(a[i]==k-1 || a[i]==k+1 || a[i]==k)
  printf("%3d",a[i]);
  }
 
getch();
}
Добавлено через 30 секунд
вот так )

Добавлено через 3 минуты
кста здесь использовано system("echo сообщение"); это то же что и стандартные для си функции вывода на экран, только работают системно, и уж точно русский язык выводят)
0
Эксперт С++
5027 / 2606 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
18.02.2010, 21:53 6
cibertronic, а задание мы читать умеем?
Дан массив. Найти k наименьших элементов.
Добавлено через 16 секунд
Ключевое слово "наименьших", а не "соседних"
0
257 / 144 / 18
Регистрация: 27.12.2009
Сообщений: 909
18.02.2010, 22:00 7
ну а если тут нужно вывести элементы меньше 10 но больше нуля то в 18й строке просто if(a[i]<10 && a[i]>0) ток причем тут k? гг

Добавлено через 2 минуты
Цитата Сообщение от fasked Посмотреть сообщение
Ключевое слово "наименьших", а не "соседних"
ну если k у него 3 то по идее тогда должно быть 3 4 4 и все

Добавлено через 2 минуты
Цитата Сообщение от fasked Посмотреть сообщение
а задание мы читать умеем?
читаем вроди)
0
Эксперт С++
5027 / 2606 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
18.02.2010, 22:03 8
k - это количество наименьших элементов, а не количество элементов, которые надо вывести.

Добавлено через 25 секунд
Цитата Сообщение от cibertronic Посмотреть сообщение
читаем вроди)
Плохо читаем, человек же даже пример привел
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,639
18.02.2010, 22:08 9
fasked, я так думаю, тс понятия не имел что ему надо выводить.
в приведённом им примере (задании) выведены числа 3 4 4 2 4
...По какому принципу они выведены- одному Богу известно. Нигде не сказано, что должно вывестись 5 наименьших.
Признатьься, я тоже понял, что необходимо вывести k наименьших, то есть три числа
3 4 4

а у тебя при k==3 выводится 4 числа
3 4 2 4
Почему ты вывел именно 4 числа а не 2 или 1 спрашивать не берусь. Наверное, ты просто ошибся. Бывает.
0
Эксперт С++
5027 / 2606 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
18.02.2010, 22:12 10
Цитата Сообщение от Garret192 Посмотреть сообщение
если в массиве
3 4 76 4 2 4
k=3
То выведется 3 4 4 2 4
Вот поэтому, почему человек в примере вывел не 3 числа, а именно 5 вы видимо тоже не возьметесь спрашивать у него.
0
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
18.02.2010, 23:06  [ТС] 11
fasked всё правильно говорит.

Добавлено через 3 минуты
Наименьших 3 числа это 2 3 и 4, но 4 встречается несколько раз поэтому мы и выводим 3 4 4 2 4
0
быдлокодер
1721 / 908 / 106
Регистрация: 04.06.2008
Сообщений: 5,639
18.02.2010, 23:06 12
Ну он тебя понял а я не могу. Вот оъясни мне почему у тебя в задании выводятся пять чисел 3 4 4 2 4?
То, что они наименьшие, я вижу. Но почему их 5?
Нет, я жду!
...Ну так бы сразу исказал.
0
Эксперт С++
4720 / 2541 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
18.02.2010, 23:07 13
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
#include <iostream>
 
using namespace std;
int main ()
{
    const n=6;
    int k, i, kol_min=1, min, fl=1, temp, fl1;
    int mas[6]={3, 4, 76, 4, 2, 4};
    // здесь можно сделать ввод значения k с клавиатуры
    k=3;
    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;
    else
    {
        for(i=0; i<n; i++)
            if(mas[i]<=min)
                cout<<mas[i]<<"  ";
    } 
    return 0; 
}
1
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
19.02.2010, 00:16  [ТС] 14
Наименьших. 2 3 4 их 3=к ,а в порядке в котором они в массиве и с повторениями они мне нужны для другого задания где эта операция является одной из подпрограмм.
0
Эксперт С++
5027 / 2606 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 1
19.02.2010, 00:52 15
вот valeriikozlov вроде более красивое и адекватное решение предложил))
хотел сначала что-то наподбе изобразить, но сил соображать уже нет)))
0
257 / 144 / 18
Регистрация: 27.12.2009
Сообщений: 909
19.02.2010, 14:11 16
терь понятно задание))
0
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
19.02.2010, 23:44  [ТС] 17
to valeriikozlov while(kol_min<k && fl)
Извини ачто значит & fl
0
Автор FAQ
3684 / 961 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
19.02.2010, 23:48 18
C++
1
while(kol_min<k && fl)
Тоже что
C++
1
while(kol_min<k && fl == true)
Т.к. fl int тип. наверное имеется ввиду такое условие
C++
1
while(kol_min<k && fl != 0)
Потому как 0 - это false а остальное преобразуется в true
0
Эксперт С++
4720 / 2541 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
20.02.2010, 05:32 19
Garret192, insideone правильно пишет. Если бы Вы указали что писать на языке C++ , то я использовал бы не int fl, а bool fl. А int fl он подходит и для C и для C++.
0
1 / 1 / 0
Регистрация: 21.10.2009
Сообщений: 84
21.02.2010, 21:07  [ТС] 20
valeriikozlov, Извини ты не мог бы обьяснить эту часть порграммы
Цитата Сообщение от valeriikozlov Посмотреть сообщение
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;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.02.2010, 21:07

Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный массив Y
Вывести на печать массив X, массив Z, массив Y, произведение элементов массива X, упорядоченный...

Сформировать массив, который будет состоять из чисел, входящих как в массив A, так и в массив B
Задание: На основе исходных массивов A и B (n и m – рабочие размеры массивов) сформировать массив...

Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а отрицательные в массив C
Дан одномерный массив A из N элементов. Переписать положительные элементы массива в массив B, а...

Дан массив целых чисел а(12). Переписать в массив х четные, а в массив у нечетные элементы массива а
Помогите пожалуйста решить эту задачу. Массив a выводит на печать. Я пишу a mod 2 = 0 , а он мне 41...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru