6 / 6 / 10
Регистрация: 16.10.2012
Сообщений: 523
1

Составить программу нахождения двух самых больших (самых маленьких) элементов массива

11.11.2013, 02:02. Показов 6594. Ответов 9
Метки нет (Все метки)

Нужно решить до завтрешнего утра (8:00 - 9:00 крайние сроки)
Составить программу нахождения двух самых больших (самых маленьких) элементов массива
1. Простой одномерный
2. Array одномерный
3. Двумерный простой
4. Array двумерный

Чтобы было нагляднее имеется рандомный массив:

1 2 3 4 5 6 7 8 9 10

Из 10 чисел, максимальным элементом будет 10 а элемент идущий перед ним будет 9
Минимальный будет 1, стоящий после него 2

Может случится так что получится такой массив:

1 1 1 2 3 4 5 5 8 9

Max: 9, 8
Min: 1, 2

Как правильно сделать проверку?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.11.2013, 02:02
Ответы с готовыми решениями:

Составить прогу нахождения двух самых маленьких(больших) элементов массива
Составить прогу нахождения двух самых маленьких(больших) элементов массива

Составить программу нахождения двух самых больших элементов массива
Помогите пожалуйста. Составить программу нахождения двух самых больших (самых маленьких) элементов...

Найти два самых больших и самых маленьких элементов массива
Одномерные массивы для обычных массивов и для класса Array. Составить программу нахождения двух...

Програма для нахождения 2 самых больших числа и 2 самых маленьких без массивов
Здравствуйте, помогите сделать задание по Лабе. Нужно создать программу которая находит 2 самых...

9
81 / 79 / 30
Регистрация: 01.09.2013
Сообщений: 152
11.11.2013, 13:56 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
        static void Main(string[] args)
        {
            var mas = new int[10];
            var rand = new Random();
            var min = int.MaxValue;
            var max = int.MinValue;
 
            for (int i = 0; i < mas.Length; i++)
            {
                mas[i] = rand.Next(1, 10);
                Console.Write(mas[i] + " ");
            }
 
            foreach (int t in mas)
            {
                if (t < min)
                    min = t;
                if (t > max)
                    max = t;
            }
            var min_ext = min + 1;
            var max_ext = max - 1;
            Console.WriteLine();
            Console.WriteLine("Max: {0}, {1}", max, max_ext);
            Console.WriteLine("Min: {0}, {1}", min, min_ext);
            Console.ReadKey(true);
        }
1
Эксперт .NET
16659 / 12425 / 3266
Регистрация: 17.09.2011
Сообщений: 20,642
11.11.2013, 14:56 3
Цитата Сообщение от Kaleb Посмотреть сообщение
C#
1
2
var min_ext = min + 1; 
var max_ext = max - 1;
Странный подход.
Генератор же не гарантирует, что в массиве обязательно будет элемент, равный макс - 1 и мин + 1.
0
81 / 79 / 30
Регистрация: 01.09.2013
Сообщений: 152
11.11.2013, 15:01 4
kolorotur,
1. отталкивался от условия => пришел к такому результату
2. как бы вы сделали?
0
145 / 45 / 16
Регистрация: 10.10.2013
Сообщений: 110
11.11.2013, 15:46 5
Цитата Сообщение от Kaleb Посмотреть сообщение
отталкивался от условия
в условии же сказано что
Цитата Сообщение от Darkvoid Посмотреть сообщение
Может случится так что получится такой массив:
1 1 1 2 3 4 5 5 8 9
.Все таки задача найти два пика ,а не выдумать их .Метод +1 & -1 подошел бы если бы сначала упорядочили свой массив и потом получали значения по индексу .
0
81 / 79 / 30
Регистрация: 01.09.2013
Сообщений: 152
11.11.2013, 15:51 6
понял
вернусь, исправлю код
0
Эксперт .NET
16659 / 12425 / 3266
Регистрация: 17.09.2011
Сообщений: 20,642
11.11.2013, 15:55 7
Цитата Сообщение от Kaleb Посмотреть сообщение
как бы вы сделали?
Как-нибудь так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int max_ext = max;
int min_ext = min;
 
for (int i = 1; i < mas.Length; i++)
{
    if (mas[i] > max)
    {
        max_ext = max;
        max = mas[i];
    }
    else if ((mas[i] > max_ext && mas[i] != max) || (max_ext == max && mas[i] < max_ext))
        max_ext = mas[i];
 
    if (mas[i] < min)
    {
        min_ext = min;
        min = mas[i];
    }
    else if ((mas[i] < min_ext && mas[i] != min) || (min_ext == min && mas[i] > min_ext))
        min_ext = mas[i];
}
Не проверял, но должно работать.

Это, конечно, если надо за один цикл сделать.
А так есть более эффективные алгоритмы.
1
81 / 79 / 30
Регистрация: 01.09.2013
Сообщений: 152
11.11.2013, 20:42 8
доделал
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
        static void Main(string[] args)
        {
            Console.WriteLine("Введите размер массива: ");
            int n;
            int.TryParse(Console.ReadLine(), out n);
            
            int[] mas = new int[n];
            var rand = new Random();
            var min = int.MaxValue;
            var max = int.MinValue;
            int min_ext = max;
            int max_ext = min;
 
            for (int i = 0; i < mas.Length; i++)
            {
                mas[i] = rand.Next(1, 10);
                Console.Write(mas[i] + " ");
            }
 
            Array.Sort(mas);
 
            for (int i = 0; i < mas.Length; i++)
            {
                if (mas[i] > max)
                {
                    max_ext = max;
                    max = mas[i];
                }
                if (mas[i] < min)
                {
                    min_ext = min;
                    min = mas[i];
                }
                if (mas[i] < min_ext && mas[i] != min)
                    min_ext = mas[i];
            }
 
            Console.WriteLine();
            Console.WriteLine("Max: {0}, {1}", mas[n-1], max_ext);
            Console.WriteLine("Min: {0}, {1}", mas[0], min_ext);
            Console.ReadKey(true);
        }

с помощью kolorotur
1
6 / 6 / 10
Регистрация: 16.10.2012
Сообщений: 523
11.11.2013, 23:53  [ТС] 9
А как сделать тоже самое с двумерным массивом? Все таки здесь выполнено только 1 условие, а еще 3=)
0
3 / 3 / 2
Регистрация: 11.11.2013
Сообщений: 17
12.11.2013, 01:25 10
Для двумерного массива.
Это может и не самое верное решение, но работает как надо.
Кликните здесь для просмотра всего текста
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
Console.WriteLine("Введите количество строк массива: ");
            int n;
            int.TryParse(Console.ReadLine(), out n);
 
            Console.WriteLine("Введите количество столбцов массива: ");
            int m;
            int.TryParse(Console.ReadLine(), out m);
            Console.WriteLine();
            int k = n * m;
            int[,] mas1 = new int[n,m];
            int[] mas2 = new int[k];
            var rand = new Random();
            var min = int.MaxValue;
            var max = int.MinValue;
            int min_ext = max;
            int max_ext = min;
            
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
 
                    mas1[i, j] = rand.Next(1, 10);
                    Console.Write(mas1[i, j] + " ");
                }
                Console.WriteLine();
            }
 
            mas2 = mas1.Cast<int>().ToArray();
            Array.Sort(mas2);
 
 
            for (int l = 0; l < mas2.Length;l++)
            {
                
                    if (mas2[l] > max)
                    {
                        max_ext = max;
                        max = mas2[l];
                    }
                    if (mas2[l] < min)
                    {
                        min_ext = min;
                        min = mas2[l];
                    }
                    if (mas2[l] < min_ext && mas2[l] != min)
                        min_ext = mas2[l];
                }
                            
 
            Console.WriteLine();
            Console.WriteLine("Max: {0}, {1}", mas2[k - 1], max_ext);
            Console.WriteLine("Min: {0}, {1}", mas2[0], min_ext);
            Console.ReadKey(true);
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2013, 01:25
Помогаю со студенческими работами здесь

Найти сумму 5 самых больших и 5 самых маленьких элементов списка
Две список целых чисел, состоящий из 30 элементов.Найти сумму 5 самых больших и 5 самых маленьких...

Найти 3 самых больших и 3 самых маленьких числа в двумерном массиве
Дан двумерный массив размерностью m x n, нужно найти и вывести 3 самых больших и 3 самых маленьких...

Вывести номера и значение двух самых больших элементов массива
одномерные массивы и сложный поиск. создать и вывести массив у с элементами вывести номера и...

Дан массив из 10 чисел.Найти сумму двух самых больших по значению элементов массива и напечатать ее значение
Помогите пожалуйста, Дан массив из 10 чисел.Найти сумму двух самых больших по значению элементов...


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

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

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