Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
.NET 4.x

Найти и поменять местами максимальный и минимальный элементы в массиве

15.06.2019, 21:16. Показов 3308. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет!
У меня тут возникла проблема с выполнением задания, сама не справляюсь
Задание:
Найдите максимальный и минимальный элементы в массиве и поменяйте их местами.

Входные данные
На вход программе сначала подается значение n 100 — количество элементов в массиве. В следующей строке входных данных расположены сами элементы массива — целые числа, по модулю не превосходящие 30000.

Выходные данные
Выдайте значения элементов массива после выполнения указанной операции.

То, что у меня пока вышло (оно не работает Т___Т)

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int[] mas = new int[a];
            string[] x = Console.ReadLine().Split();
            string str = "";
            int min = mas[0]; 
            int minind = 0;
            int max = mas[0];
            int maxind = 0;
            for (int i = 0; i < a; i++)
            {
                mas[i] = Convert.ToInt32(x[i]);
                if (mas[i] > max)
                {
                    mas[i] = max;
                    maxind = i;
                }
                if (mas[i] < min)
                {
                    mas[i] = min;
                    minind = i;
                }
                int z = min;
                min = max;
                max = z;
                str += Convert.ToString(mas[i]) + " ";
            }
            Console.WriteLine(str);
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.06.2019, 21:16
Ответы с готовыми решениями:

В массиве А из 12 целых чисел поменять местами максимальный и минимальный элементы
«Обработка одномерных массивов»: В массиве А из 12 целых чисел поменять местами максимальный и минимальный элементы, а все элементы,...

Найти в массиве максимальный и минимальный элементы и поменять их местами
Помогите разобраться Дан массив целых чисел. Найти в нем максимальный и минимальный элементы и поменять их местами. Задать размерность...

Найти в массиве минимальный и максимальный элементы и поменять их местами
Помогите пожалуйста, пришёл с армии восстановился забыл многое Найти в массиве G минимальный и максимальный элементы и поменять их...

18
202 / 120 / 85
Регистрация: 15.12.2016
Сообщений: 235
15.06.2019, 21:43
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
        class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int[] mas = new int[a];
            string[] x = Console.ReadLine().Split(' ');
            int min = mas[0]; 
            int minind = 0;
            int max = mas[0];
            int maxind = 0;
            for (int i = 1; i < a; i++)
            {
                mas[i] = Convert.ToInt32(x[i]);
                if (mas[i] > max)
                {
                    max = mas[i];
                    maxind = i;
                }
                if (mas[i] < min)
                {
                    min = mas[i];
                    minind = i;
                }
            }
            int z = mas[maxind];
            mas[maxind] = mas[minind];
            mas[minind] = z;
            foreach (int i in mas)
                Console.Write(i + " ");
        }
    }
}
1
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
15.06.2019, 22:20  [ТС]
Спасибо, уже лучше
Но не совсем то... если честно, уже голову сломала об эту задачу)

Должно работать примерно так:
входные данные
5
1 5 4 3 2
выходные данные
5 1 4 3 2

Добавлено через 18 минут
AndrewLis, а получается так:
ввожу
5
3 2 1 4 5
на выходе получается
5 2 1 4 0
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
15.06.2019, 22:58
Зачем вам переменный на максимальны и минимальный элемент если вы используете индексы?
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int[] mas = new int[a];
            int[] x = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
 
            int minind = 0;
            int maxind = 0;
 
            for (int i = 0; i < a; i++)
            {
                if (x[minind] > x[i])
                {
                    minind = i;
                }
 
                if (x[maxind] < x[i])
                {
                    maxind = i;
                }
                
            }
 
            if (maxind != minind)
            {
                int temp = x[minind];
                x[minind] = x[maxind];
                x[maxind] = temp;
            }
 
            Console.WriteLine(String.Join(" ", x));
 
            Console.ReadKey();
        }
    }
}
Добавлено через 19 минут
Цитата Сообщение от Masson1848 Посмотреть сообщение
for (int i = 0; i < a; i++)
Тут вместо а, нужно x.Length
Вам mas и a не нужны, если вы только не хотите находить число до определённого диапазона. Или фиксированное число элементов в массиве
1
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
15.06.2019, 23:12  [ТС]
Masson1848, Я на 1 курсе в университете, знать не знаю про такие штуки)
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
15.06.2019, 23:40
А если смотреть ваш код, то у вас обмен элементов в цикле, а должен дать после цикла, в этом и ошибка
1
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
16.06.2019, 14:47  [ТС]
Masson1848, Я вынесла его за цикл, но всё-равно ничего не поменялось..
Видимо, массив не правильно считываю
Миниатюры
Найти и поменять местами максимальный и минимальный элементы в массиве  
0
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
16.06.2019, 16:10  [ТС]
Masson1848, Я пришла к выводу, что мне надо массив x преобразовать в int[] и вместо mas[i] использовать x[i]...
Не знаете, как это можно сделать?
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
16.06.2019, 19:59
Yanotic, я вам выше писал пример, там есть конвертация . Array.ConvertAll

Добавлено через 28 минут
Взял конкретно ваш пример.
Вы у себя меняет не элементы в массиве, а значения переменных.
C#
1
2
3
int z = min;
min = max;
max = z;
И ещё, вы сначала mas[i] присваиваете значение. Путём
C#
1
mas[i] = Convert.ToInt32(x[i]);
А следом, вы его зачем-то меняете. Мне это непонятно зачем
C#
1
mas[i] = max;
Я исправил ваш код и он работает
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int[] mas = new int[a];
 
            string[] x = Console.ReadLine().Split();
 
            string str = "";
            int min = mas[0];
            int minind = 0;
            int max = mas[0];
            int maxind = 0;
 
            for (int i = 0; i < a; i++)
            {
                mas[i] = Convert.ToInt32(x[i]);
                if (mas[i] > max)
                {
                    maxind = i;
                }
                if (mas[i] < min)
                {
                    minind = i;
                }                
            }
 
            int z = mas[minind];
            mas[minind] = mas[maxind];
            mas[maxind] = z;
            Console.WriteLine(String.Join(" ", mas));
 
            Console.ReadKey();
        }
    }
}
1
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
16.06.2019, 20:26  [ТС]
Masson1848, Спасибо за советы!
Но код работает неправильно, он меняет местами элементы с минимальным и максимальным индексами, а не значениями
Миниатюры
Найти и поменять местами максимальный и минимальный элементы в массиве  
0
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
16.06.2019, 20:46  [ТС]
Masson1848, прошу прощения, что напрягаю вас с этим вопросом
Голова не работает совсем, с температурой слегла, а учиться надо
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
16.06.2019, 21:39
Лучший ответ Сообщение было отмечено Yanotic как решение

Решение

Yanotic,
Это мой косяк. Я поправил
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int[] mas = new int[a];
 
            string[] x = Console.ReadLine().Split();
 
            string str = "";
            int min = mas[0];
            int minind = 0;
            int max = mas[0];
            int maxind = 0;
 
            for (int i = 0; i < a; i++)
            {
                mas[i] = Convert.ToInt32(x[i]);
                if (mas[i] > max)
                {
                    max = mas[i];
                    maxind = i;
                }
                if (mas[i] < min)
                {
                    min = mas[i];
                    minind = i;
                }                
            }
 
            int z = mas[minind];
            mas[minind] = mas[maxind];
            mas[maxind] = z;
            Console.WriteLine(String.Join(" ", mas));
 
            Console.ReadKey();
        }
    }
}
0
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
16.06.2019, 22:26  [ТС]
Masson1848, всё равно что-то идет не так
Миниатюры
Найти и поменять местами максимальный и минимальный элементы в массиве  
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
16.06.2019, 22:31
Лучший ответ Сообщение было отмечено Yanotic как решение

Решение

Это
Цитата Сообщение от Masson1848 Посмотреть сообщение
int min = mas[0];
и Это
Цитата Сообщение от Masson1848 Посмотреть сообщение
int max = mas[0];
Замените на
C#
1
2
int min = int.Parse(x[0]);            
            int max = int.Parse(x[0]);
И будет вам счастье. Я проверял с отрицательными числами и у меня работало
1
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
16.06.2019, 23:01  [ТС]
Masson1848, действительно, всё работает
Спасибо вам огромнейшее!!!

Добавлено через 14 минут
Masson1848, Можно Вас ещё немного помучить? Код под другую задачу написала, но работает не так, как надо... не могу разобраться

Задача:
Напишите программу, которая выводит номера элементов массива, равных заданному значению X .

Входные данные
Первая строка содержит размер массива N . Во второй строке через пробел задаются N чисел – элементы массива. В третьей строке записано число X . Гарантируется, что 0 < N ≤ 10000 .

Выходные данные
Программа должна вывести в одной строке номера элементов массива, равных X , разделив их пробелами. Предполагается, что нумерация начинается с единицы. Если таких элементов нет, нужно вывести число -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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int[] m = new int[a];
            string[] n = Console.ReadLine().Split(' ');
            int x = Convert.ToInt32(Console.ReadLine());
            int z = 0;
            string s = "";
            for (int i = 0; i < a; i++)
            {
                m[i] = Convert.ToInt32(n[i]);
                if (x == m[i])
                {
                    z = i + 1;
                    s += Convert.ToString(z) + " ";
                }
                else if (x != m[i])
                {
                    s = "-1";
                }
            }
            Console.WriteLine(s);
        }
    }
}
Результат: при любых значениях Х выводит -1, не могу понять, почему..
0
315 / 244 / 149
Регистрация: 03.10.2017
Сообщений: 886
Записей в блоге: 1
17.06.2019, 00:10
Yanotic, всё просто, у вас во втором if строка заменяется и если последний элемент не равен х, то у вас заменяется на -1. . Проверка на -1 должна быть после цикла. Если строка пуста, то выводим минус 1, а если нет, то выводим строку. То бишь второй ты писать в цикле не нужно
0
0 / 0 / 0
Регистрация: 14.06.2019
Сообщений: 10
17.06.2019, 00:49  [ТС]
Masson1848, Пробовала, если выношу за цикл - вылетает ошибка
0
 Аватар для matveev1512
53 / 43 / 22
Регистрация: 29.05.2016
Сообщений: 214
17.06.2019, 02:24
плохо пробовали
0
 Аватар для matveev1512
53 / 43 / 22
Регистрация: 29.05.2016
Сообщений: 214
17.06.2019, 02:35
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
using System;
 
 
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = Convert.ToInt32(Console.ReadLine());
            int[] m = new int[a];
            string[] n = Console.ReadLine().Split(' ');
            int x = Convert.ToInt32(Console.ReadLine());
            int z = 0;
            string s = "";
            for (int i = 0; i < a; i++)
            {
                m[i] = Convert.ToInt32(n[i]);
                if (x == m[i])
                {
                    z = i + 1;
                    s +=  z.ToString() + " " ;
                }                
            }
            if (!String.IsNullOrEmpty(s))
            {
                Console.WriteLine(s);
            }
            Console.ReadLine();
        }
    }
}
Добавлено через 1 минуту
И БОЖЕ ВАС упаси так называть переменные! Давайте им осмысленные имена!!

Добавлено через 8 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int a = Convert.ToInt32(Console.ReadLine());
            int[] m = new int[a];
            string[] n = Console.ReadLine().Split(' ');
            int x = Convert.ToInt32(Console.ReadLine());
            int z = 0;
            string s = "";
            for (int i = 0; i < a; i++)
            {
                m[i] = Convert.ToInt32(n[i]);
                if (x == m[i])
                {
                    z = i + 1;
                    s +=  z.ToString() + " " ;
                }                
            }
            
            Console.WriteLine(String.IsNullOrEmpty(s) ? "-1" : s);

Забыл что нужно вывод -1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2019, 02:35
Помогаю со студенческими работами здесь

Найти в массиве максимальный и минимальный элементы и поменять их местами
uses crt; var min,max,z:integer; procedure minmax(var min,max:integer); var a:array of integer; z,i:integer; begin ...

Найти в массиве максимальный и минимальный элементы по модулю и поменять их местами
Вот решаю задачу по Си++, но так как дома среды разработки такой нет , то решаю задачу по Си... ищу в массиве максимальный и минимальный...

Найти в целочисленном массиве минимальный и максимальный элементы и поменять их местами
Найти в целочисленном массиве минимальный и максимальный элементы и поменять их местами.

В массиве целых чисел найти минимальный и максимальный элементы и поменять их местами
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;malloc.h&gt; #include &lt;stdlib.h&gt; int main() { int *a; int i, n, min, max; ...

В массиве целых чисел найти минимальный и максимальный элементы и поменять их местами
помогите пожалуйста написать это на C В массиве целых чисел найти Минимальный и максимальный элементы и поменять их местами


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru