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

Сделать функцию, которая принимает одномерный массив и возвращает индексы трех его самых больших элементов(сортировку не использовать), указателями - C++

Восстановить пароль Регистрация
 
VlaDdislav
2 / 2 / 0
Регистрация: 18.12.2012
Сообщений: 77
23.02.2013, 21:02     Сделать функцию, которая принимает одномерный массив и возвращает индексы трех его самых больших элементов(сортировку не использовать), указателями #1
Сделать функцию, которая принимает одномерный массив и возвращает индексы трех его самых больших элементов(сортировку не использовать), указателями.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2013, 21:02     Сделать функцию, которая принимает одномерный массив и возвращает индексы трех его самых больших элементов(сортировку не использовать), указателями
Посмотрите здесь:

Написать функцию, которая принимает строку звуков, а возвращает звук C++
Написать функцию, которая принимает два числа и возвращает C++
C++ Написать функцию, которая принимает два числа и возвращает
C++ Сделать функцию, которая по порядковому номеру числа Фибоначчи возвращает его значение
C++ Сделать функцию, которая принимает одномерный массив и возвращает индексы его максимального и минимального элементов, с указателями. С++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vaiz
 Аватар для Vaiz
98 / 92 / 29
Регистрация: 01.07.2012
Сообщений: 268
Завершенные тесты: 1
23.02.2013, 21:50     Сделать функцию, которая принимает одномерный массив и возвращает индексы трех его самых больших элементов(сортировку не использовать), указателями #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void search(int *x, int n, int *max) //массив, размер, массив номеров макс элементов
{
int i;
max[0]=max[1]=max[2]=0;
for(i=1;i<n;i++)
{
if(x[i]>x[max1])
{
max[2]=max[1];
max[1]=max[0];
max[0]=i;
}
}
}
Не будет работать если максимальное число 1е. Чтобы работала надо искать минимальное и присваивать в начале массиву номер минимального числа.

Добавлено через 7 минут
Это если конкретно через указатели надо
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void search(int *x, int n, int *max1, int *max2, int *max3) 
{
int i;
*max1=*max2=*max3=0;
for(i=1;i<n;i++)
{
if(x[i]>x[*max1])
{
*max[2]=*max[1];
*max[1]=*max[0];
*max[0]=i;
}
}
}
HighPredator
 Аватар для HighPredator
5350 / 1733 / 320
Регистрация: 10.12.2010
Сообщений: 5,120
Записей в блоге: 3
23.02.2013, 21:57     Сделать функцию, которая принимает одномерный массив и возвращает индексы трех его самых больших элементов(сортировку не использовать), указателями #3
Предлагаю такой вариант:
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* Search(int A[], const int N)
{
    int *max=new int[3];
    max[0]=A[0];
    max[1]=A[0];
    max[2]=A[0];
    for(int i=1;i<N;i++)
    {
        if(A[i]>max[0])
        {
            max[2]=max[1];
            max[1]=max[0];
            max[0]=A[i];
        }
    }
    return max;
}
 
 
int main()
{
    int *a;
    int N;
    cout<<"Enter array size:";
    cin>>N;
    a=new int[N];
    for(int i=0;i<N;i++)
    {
        cout<<"Enter a["<<i<<"]: ";
        cin>>a[i];
    }
    int *max=Search(a,N);
    cout<<"max0="<<max[0]<<" max1="<<max[1]<<" max2="<<max[2]<<endl;
    delete []max;
    delete []a;
    getchar();
    return 0;
}
ya_noob
_
200 / 144 / 9
Регистрация: 08.10.2011
Сообщений: 432
24.02.2013, 08:16     Сделать функцию, которая принимает одномерный массив и возвращает индексы трех его самых больших элементов(сортировку не использовать), указателями #4
Vaiz, HighPredator, вы не учли всех случаев, а именно если max[ 1 ] < a[ i ] < max[ 0 ] и если max[ 2 ] < a[ i ] < max[ 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
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
#include <climits>
using namespace std;
 
struct Three
{
    int *a, *b, *c;
};
int MIN_VAL = INT_MIN;
 
Three search3Max( int *a, int n )
{
    Three r;
    
    r.a = &MIN_VAL; r.b = &MIN_VAL; r.c = &MIN_VAL;
    for ( int i = 0; i < n; ++i )
        if ( a[ i ] > *r.a ) { r.c = r.b; r.b = r.a; r.a = &a[ i ]; }
        else if ( a[ i ] > *r.b ) { r.c = r.b; r.b = &a[ i ]; }
        else if ( a[ i ] > *r.c ) r.c = &a[ i ];
    return r;
}
 
int main()
{
    const int N = 10;
    int a[ N ] = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
//  int a[ N ] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
//  int a[ N ] = { 9, 0, 8, 1, 7, 2, 6, 3, 5, 4 };
//  int a[ N ] = { 8, 6, 4, 2, 0, 1, 3, 5, 7, 9 };
    Three max;
 
    cout << "Array: ";
    for ( int i = 0; i < N; ++i ) cout << a[ i ] << " ";
    max = search3Max( a, N );
    cout << "\nMax values:\n1st: " << *max.a << "\n2nd: " << *max.b << "\n3rd: " << *max.c << endl;     
 
    return 0;
}
Yandex
Объявления
24.02.2013, 08:16     Сделать функцию, которая принимает одномерный массив и возвращает индексы трех его самых больших элементов(сортировку не использовать), указателями
Ответ Создать тему
Опции темы

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