С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 23

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

01.04.2015, 13:20. Показов 3275. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Понимаю что это бред, но оригинальнее пока ничего придумать не смог. подсобите пожалуйста.
Java
1
2
3
4
5
6
7
for(i=1; i<arr.length-1; i++){
            arr[0]=arr[arr.length-1];
            arr[i]=arr[i+1];
            System.out.print(arr[i]);
            if(arr[i+1]==max)
                break;
         }
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.04.2015, 13:20
Ответы с готовыми решениями:

Поменять местами минимальный элемент с первым элементом массива, а максимальный элемент с последним
Здравствуйте. Помогите пожалуйста написать программу: для поиска минимального и максимального элементов массива из 15 действительных чисел....

Массив: поменять местами первый минимальный с первым элементом массива, а максимальный элемент - с последним
первый минимальный с первым элементом массива поменять местами ,а максимальный элемент с последним элементом массива. вот как тут делать ?...

Найти максимальный и минимальный элемент в каждой строке массива и поменять местами с первым и последним элементом
Дана матрица M*N. Нужно найти максимальный и минимальный элемент в каждой строке массива и поменять местами с первым и последним элементом...

7
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
01.04.2015, 17:16
В зависимости от того какой элемент мин/макс ближе к началу/концу массива, программа осуществляет сдвиг элементов, пока этот мин/макс элемент не окажется у начала/конца массива:
Java
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
import java.util.Arrays;
import java.util.Random;
 
class Task {
    public static void arrayShift(int[] array, int size, int shift) {
        int countShift;
        
        shift %= size;
 
        if ( shift < 0 ) shift += size;
 
        countShift = size - shift;
        
        if ( shift <= countShift ) {
            int[] buffer = new int[shift];
            
            for ( int i = 0, temp = countShift; i < shift; i++, temp++ ) {
                buffer[i] = array[temp];
            }
            for ( int last = size - 1, j = last, temp2 = countShift - 1; temp2 >= 0; j--, temp2-- ) {
                array[j] = array[temp2];
            }
            for ( int k = 0; k < shift; k++ ) {
                array[k] = buffer[k];
            }
        } else {
            int[] buffer = new int[countShift];
            
            for ( int i = 0; i < countShift; i++ ) {
                buffer[i] = array[i];
            }
            for ( int j = 0, temp = countShift; j < shift; j++, temp++ ) {
                array[j] = array[temp];
            }
            for ( int k = shift, temp2 = 0; k < size; k++, temp2++ ) {
                array[k] = buffer[temp2];
            }
        }
    }
 
    public static void main (String[] args) {
        Random rand = new Random();
        int size = 13;
        int min = 0;
        int max = 0;
        int delta, leftIndex, rightIndex, leftSide, rightSide;
        int[] array = new int[size];
        
        for (int i = 0; i < size; i++) {
            array[i] = rand.nextInt(100);
            if (array[max] < array[i]) max = i;
            if (array[min] > array[i]) min = i;
        }
        System.out.println(Arrays.toString(array));
        System.out.println("Min: array[" + min + "]=" + array[min]);
        System.out.println("Max: array[" + max + "]=" + array[max]);
        
        if (min < max) {
            leftIndex = min;
            rightIndex = max;
        } else {
            leftIndex = max;
            rightIndex = min;
        }
        
        if (leftIndex < rightIndex) {
            leftSide = leftIndex;
            rightSide = rightIndex;
        } else {
            leftSide = rightIndex;
            rightSide = leftIndex;
        }
        
        delta = (size-1) - rightSide;
        
        if (leftSide < delta) {
            arrayShift(array, size, size-leftSide);
        } else {
            arrayShift(array, size, delta);
        }
        System.out.println(Arrays.toString(array));
    }
}
Code
1
2
3
4
[69, 85, 12, 62, 81, 53, 31, 1, 58, 85, 71, 76, 5]
Min: array[7]=1
Max: array[1]=85
[85, 12, 62, 81, 53, 31, 1, 58, 85, 71, 76, 5, 69]
0
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 23
01.04.2015, 17:42  [ТС]
спасибо за ответ но это слишком сложно для меня. прохожу сейчас массивы и мне дано тз из 6 заданий которые у меня занимают 60 строк. а тут 1 из этих 6 задач на 60 строк реализована. плюс я так и не понял где сам механизм сдвига реализован. вот мой код, в который мне нужно дописать или сдвиг вправо так чтобы минимальный элемент массива оказался первый иди сдвиг влево так чтобы максимальный элемент оказался последним ну или и то и другое с выводом двух сдвинутых массивов.
Java
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
public class Test {
    public static void main(String[] args){
          int[] arr = new int[10];
          int imin = 0;
          int imax = 0;
          int max = arr[0];
          int min = arr[0];
          int tmp;
          int i = 0;
          for(i=0; i<arr.length; i++){
          arr[i] = (int) (Math.random()*i);     // задание 1:заполнение массива
          System.out.print(arr[i]);
            }
          System.out.println();
 
          for(int k=0; k<arr.length;k++){
          if(arr[k]<min){
          min = arr[k];
          imin = k;
              }
          else if(arr[k]>max){
          max = arr[k];
          imax = k;                                   // задание 2:поиск минимального и максимального элемента и их swap
               }
            }
          tmp = arr[imin];
          arr[imin] = arr[imax];
          arr[imax] = tmp;
          for(int j=0;j<arr.length;j++){
          System.out.print(arr[j]);
             }
          System.out.println(); 
 
          int average = (min + max)/2;
          int minDif = Math.abs(average - arr[0]);
          int CloseToAverage = 0;
          for(int t=0; t<arr.length; t++){
          CloseToAverage = Math.abs(average - arr[t]);     // задание 3:поиск элемента ближайшего к среднему
          if(CloseToAverage==1){
          System.out.println(arr[t]);
          break;
                }
             }
          for(i=0; i<arr.length; i++){
          System.out.print(arr[arr.length-i-1]);
          }
          System.out.println();
          /*
         for(i=1; i<arr.length-1; i++){     
            arr[0]=arr[arr.length-1];
            arr[i]=arr[i+1];
            System.out.print(arr[i]);           задание 4: мои ничтожные попытки реализовать сдвиг
            if(arr[i+1]==max)
                break;
         }
         /*
   }
}
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
01.04.2015, 17:45
То есть для минимального элемента сдвиг вправо, а для максимального влево, верно?
0
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 23
01.04.2015, 18:06  [ТС]
именно. так чтобы минимальный элемент оказался в итоге первым или максимальный последним. и если можно как-то без конструкторов и наследований. а то я не разберусь)
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
02.04.2015, 02:22
Лучший ответ Сообщение было отмечено vizl как решение

Решение

Вот, программа минимальный элемент сдвигает вправо, максимальный влево, использовал ту же универсальную функцию сдвига элементов (arrayShift), когда-то давно писал её на чистом Си

Java
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
import java.util.Arrays;
import java.util.Random;
 
class Task {
    public static void arrayShift(int[] array, int size, int shift) {
        int countShift;
        
        shift %= size;
 
        if ( shift < 0 ) shift += size;
 
        countShift = size - shift;
        
        if ( shift <= countShift ) {
            int[] buffer = new int[shift];
            
            for ( int i = 0, temp = countShift; i < shift; i++, temp++ ) {
                buffer[i] = array[temp];
            }
            for ( int last = size - 1, j = last, temp2 = countShift - 1; temp2 >= 0; j--, temp2-- ) {
                array[j] = array[temp2];
            }
            for ( int k = 0; k < shift; k++ ) {
                array[k] = buffer[k];
            }
        } else {
            int[] buffer = new int[countShift];
            
            for ( int i = 0; i < countShift; i++ ) {
                buffer[i] = array[i];
            }
            for ( int j = 0, temp = countShift; j < shift; j++, temp++ ) {
                array[j] = array[temp];
            }
            for ( int k = shift, temp2 = 0; k < size; k++, temp2++ ) {
                array[k] = buffer[temp2];
            }
        }
    }
    
    public static void main (String[] args) {
        Random rand = new Random();
        int size =7;
        int[] array = new int[size];
        int min = 0;
        int max = 0;
        int shiftMin, shiftMax;
        
        for (int i = 0; i < size; i++) {
            array[i] = rand.nextInt(100);
            if (array[min] > array[i]) min = i; //нашли минимальный элемент
        }
        
        System.out.println(Arrays.toString(array));
        System.out.println("Min: array[" + min + "]=" + array[min]);
        
        shiftMin = (size-1) - min;
        
        arrayShift(array, size, shiftMin); //сдвинули мин вправо
        System.out.println(Arrays.toString(array));
        
        for (int i = 0; i < size; i++) {
            if (array[max] < array[i]) max = i; //нашли максимальный элемент
        }
        
        System.out.println("Max: array[" + max + "]=" + array[max]);
        
        shiftMax = (size) - max;
        
        arrayShift(array, size, shiftMax); //сдвинули макс влево
        System.out.println(Arrays.toString(array));
    }
}
Code
1
2
3
4
5
[51, 43, 44, 29, 83, 81, 93]
Min: array[3]=29
[83, 81, 93, 51, 43, 44, 29]
Max: array[2]=93
[93, 51, 43, 44, 29, 83, 81]
Добавлено через 10 минут
На всякий случай уточню, я правильно тебя понял - сдвиг элементов подразумевает сдвиг всех элементов следом за мин/макс, а не просто обмен последнего с минимальным или первого с максимальным?
1
0 / 0 / 0
Регистрация: 19.03.2015
Сообщений: 23
02.04.2015, 14:21  [ТС]
работает как надо. плюсанул. но это все равно слишком сложно. затулить это в свою программу я не смогу, как работают конструкторы я пока не в курсе да и семантика кода в методе arrayShift, с танцами с бубном с размерами и сдвигом, мне не понятна... в любом случае - благодарю за помощь
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
02.04.2015, 14:36
Цитата Сообщение от vizl Посмотреть сообщение
как работают конструкторы я пока не в курсе да и семантика кода в методе arrayShift, с танцами с бубном с размерами и сдвигом, мне не понятна... в любом случае - благодарю за помощь
Здесь нет конструктора) просто войдовая функция.
Вкратце, её алгоритм заключается в том, в какую сторону ближе сдвигать элементы, в ту сторону она и выполняет сдвиг, например дан массив:
2 1 3 4 5 6
здесь продуктивнее будет сдвинуть единицу на 2 элемента влево, чтоб она оказалась в конце справа, чем сдвигать её на 4 элемента вправо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2015, 14:36
Помогаю со студенческими работами здесь

Сдвиг массива влево и вправо на 1 элемент
неправильно сдвигает влево :с хелп #define size 100 #include &lt;stdio.h&gt; #include &lt;math.h&gt; void vvod_mas(double *,int); void left(...

Поменять местами максимальный элемент матрицы с ее первым элементом, а минимальный элемент – с последним
помогите пожалуйста с задачей , Поменять местами максимальный элемент матрицы F(k,p)с его первым элементом, а минимальный элемент – с...

Поменять максимальный элемент с последним, минимальный с первым в векторе
поменять максимальный элемент с последним, минимальный с первым в векторе

Поменять местами максимальный элемент матрицы с первым, а минимальный – с последним
Поменять местами максимальный элемент матрицы В(n,m) с его первым элементом, а минимальный элемент – с последним. В матрице только один...

Найти в каждой строке матрицы максимальный и минимальный элемент и поменять их с первым и последним
не могу понять где у меня ошибка((( не правильно находится минимальный элемент строки... uses crt; var a:array of integer; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru