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

Найти три наименьших элемента произвольного одномерного массива - C++

Восстановить пароль Регистрация
 
Alias_ru
0 / 0 / 0
Регистрация: 13.07.2014
Сообщений: 3
13.07.2014, 23:59     Найти три наименьших элемента произвольного одномерного массива #1
1 Найти 3 наименьших элемента произвольного одномерного массива.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2014, 23:59     Найти три наименьших элемента произвольного одномерного массива
Посмотрите здесь:

Как найти три наибольших элемента массива за один просмотр C++
В однородном массиве вещественных чисел три наименьших элемента заменить нулями. C++
C++ Для одномерного массива, состоящих из n целых чисел: Найти номер максимального элемента;
C++ Сумма элементов произвольного одномерного массива
Найти минимальные элементы в каждом столбце произвольного двумерного массива и записать их в виде одномерного C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11835 / 6814 / 769
Регистрация: 27.09.2012
Сообщений: 16,887
Записей в блоге: 2
Завершенные тесты: 1
14.07.2014, 08:53     Найти три наименьших элемента произвольного одномерного массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
 
int main()
{
    std::vector < int > vec ( std::istream_iterator<int>(std::cin) , std::istream_iterator<int>() ) ;
    if ( vec.size() < 3 )
    {
        std::cerr << "Error\n" << std::endl ;
        return 1 ;
    }
    std::nth_element ( vec.begin() , vec.begin() + 2 , vec.end() ) ;
    std::copy ( vec.begin() , vec.begin() + 3 , std::ostream_iterator<int>(std::cout, " ") ) ;
}
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
14.07.2014, 10:52     Найти три наименьших элемента произвольного одномерного массива #3
Pascal
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
Uses crt;
 
Const M = 3;
 
Type ArrTp = Array [1..1] of Integer;
     PArr = ^ArrTp;
 
Var Arr : PArr;
    Count, i, j : Integer;
    Min : Array [1..M] of Integer;
 
Label EndLoop;
 
Begin
clrscr;
 
Write( 'N=' );
ReadLn( Count );
 
If Count > M then
  begin
  GetMem( Arr, Count * SizeOf( pArr ) );
 
  Randomize;
  For i:=1 to Count do
    Arr^[i] := Random( 100 );
 
  For i:=1 to M do
    Min[i] := Arr^[i];
 
  For i:=1 to Count do
    begin
    For j:= 1 to M do
      If Arr^[i] = Min[j] then
        Goto EndLoop;
 
    For j:= 1 to M do
      If Arr^[i] < Min[j] then
        begin
        Min[j] := Arr^[i];
        Break;
        end;
    EndLoop:
    end;
  FreeMem( Arr, Count * SizeOf( pArr ) );
 
  For j:= 1 to M do
    WriteLn( 'Min[', j, ']=', Min[j] );
  end;
Readln;
End.
Тамика
14.07.2014, 10:56
  #4

Не по теме:

Паскаль?..Зачем Паскаль?

volvo
Супер-модератор
 Аватар для volvo
21812 / 14175 / 3948
Регистрация: 22.10.2011
Сообщений: 25,049
Записей в блоге: 2
14.07.2014, 13:04     Найти три наименьших элемента произвольного одномерного массива #5
Цитата Сообщение от Тамика Посмотреть сообщение
Паскаль?..Зачем Паскаль?
Уточняю вопрос: зачем ТАКОЙ Паскаль?

SatanaXIII, хотелось показать, как грубо выглядит код на Паскале в сравнении с С++? А научиться писать нормальный, а не г...код - не пробовал? Попробуй, возможно, у тебя даже получится... Ну, скажем:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{$mode objfpc}
uses math, FGL;
 
type
  T = specialize TFPGList<Integer>;
 
function MySort(const v1, v2: Integer) : Integer;
begin Result := CompareValue(v1, v2); end;
 
var i : Integer;
 
begin
  with T.Create do
  try
    while not eoln do
    begin read(i); Add(i) end;
 
    Sort(@MySort);
    for i := 0 to 2 do writeln(Items[i]);
 
  finally
    Free;
  end;
end.
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5548 / 2562 / 233
Регистрация: 01.11.2011
Сообщений: 6,333
Завершенные тесты: 1
14.07.2014, 13:09     Найти три наименьших элемента произвольного одномерного массива #6
Тубропаскаль не знать о такая директиве:
Цитата Сообщение от UI Посмотреть сообщение
{$mode objfpc}


Добавлено через 66 секунд
Цитата Сообщение от UI Посмотреть сообщение
хотелось показать, как грубо выглядит код на Паскале в сравнении с С++?
Откуда такие мысли вообще? Телепат все ж пробудился, я гляжу?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2014, 15:32     Найти три наименьших элемента произвольного одномерного массива
Еще ссылки по теме:

C++ Найти три максимальных аэлемента одномерного массива
C++ Найти минимальный элемент произвольного одномерного массива
C++ Найти три наименьших элемента произвольного одномерного массива

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

Или воспользуйтесь поиском по форуму:
IrineK
Заблокирован
14.07.2014, 15:32     Найти три наименьших элемента произвольного одномерного массива #7
Впору разбрасывать тему по разным разделам )

Можно не сортировать весть массив (~N logn), а упорядочивать выбранную тройку (от 2 до 4 сравнений)
За один проход можно управиться (~N)

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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <ctime>
 
//---------------------------------------------------------------
int *CreateRandomArray (int N)
{
    int *arr = new int [N];
    for (int i = 0; i<N; i++)
        arr[i] = rand()%100;
 
    return arr;
}
 
void PrintArray (char *name, int *arr, int N)
{
    std::cout <<"\n"<<name <<":\n";
    for (int i = 0; i<N; i++)
        std::cout << *(arr+i) << "  ";
    std::cout <<"\n";
}
//-----------------------------------------------------------------
 
typedef struct trio
{
    int min,middle,max;
}TRIO;
 
 
void ArrangeTrio (TRIO *order)
{
    int a = order->min, b = order->middle, c= order->max;
    if(a>b)
    {   if(b>c)
        {   order->min = c;
            order->middle = b;
            order->max = a;
        }
        else if(a>c)
        {   order->min = b;
            order->middle = c;
            order->max = a;
        }
        else
        {   order->min = b;
            order->middle = a;
            order->max = c;
        }
    }
    else
    {   if(b<c)
        {   order->min = a;
            order->middle = b;
            order->max = c;
        }
        else if(a<c)
        {   order->min = a;
            order->middle = c;
            order->max = b;
        }
        else
        {   order->min = c;
            order->middle = a;
            order->max = b;
        }
    }
}
 
void GetTrio (int *arr, int M, TRIO *res)
{
    for (int i = 4; i<M; i++)
        if (arr[i]<res->max)
        {   res->max = arr[i];
            ArrangeTrio(res);
        }
}
 
//----------------------------------------------------------------------------
int main()
{   
    srand ((unsigned int)time (NULL));
    
    int M = 15;
    int *arr = CreateRandomArray (M);
    PrintArray ("Array", arr, M);
 
    TRIO *res = new TRIO;
    res->min = arr[0];
    res->middle = arr[1];
    res->max = arr[2];
    ArrangeTrio(res);
    
    GetTrio (arr,M,res);
 
    std::cout<< '\n'<< res->min<<'\t'<<res->middle<<'\t'<<res->max;
 
    delete []arr;
    delete res;
 
    std::cin.get();
    return 0;
}
Yandex
Объявления
14.07.2014, 15:32     Найти три наименьших элемента произвольного одномерного массива
Ответ Создать тему
Опции темы

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