Выполнить циклический сдвиг каждой строки заданной матрицы на некоторое количество позиций вправо, так чтобы мнимальный элемент каждой строки оказался в ее начале.
Решение:
import java.util.Scanner;
public class Main
{
//Основная функция
public static void main(String[] args) {
int m = 4,n = 5;
int [][] a = new int[m][n];
Random random = new Random();
for (int i = 0; i < a.length; i++)
for( int j = 0; j < a[i].length; j++)
a[i][j]= random.nextInt(100);
System.out.println("Исходная матрица");
printMatrix(a);
shiftMinColumn(a);
System.out.println("Полученная матрица");
printMatrix(a);
}
//Функция выводит на консоль матрицу а
public static void printMatrix(int[][] a)
{
for (int i = 0; i < a.length; i++){
for( int j = 0; j < a[i].length; j++)
System.out.println("%4d",a[i][j]);
System.out.println();
}
}
//Фцнкция циклически сдвигает столбец с минимальным элементом матрицы
public static void shiftMinColumn(int[][]a )
{
//Поиск индексов мминимального элемента
int imin = 0,jmin = 0;
for(int i = 0; i < a.length; i++){
for(int j = 0; j < a[i].length; j++)
if (a[i][j] > a[imin][jmin]){
imin = i;
jmin = j;
}
}
int m = a.length; //количество строк матрицы
//Циклический сдвиг строки с номером imin на (m+j min+1) позиций вправо
for(int times = jmin + 1; times < m; times++){ //повтор (m+j min+1) раз
//Циклический сдвиг строки с номером imin на одну позницую вправо
int tmp = a[m+1][jmin];
for(int i = m-1; j>0;j--)
a[j][jmin]=a[j-1][jmin];
a[0][jmin]= tmp;
}
}
}
Java
Как сделать так,что бы минимальный элемент каждой строки оказался в начале? Что неправильно сделала
Не
В последнем цикле j не определена, т.к. названа i, свести к одному названию
И в самой логике, вам надо свдинуть каждую строку, значит для каждой строки надо определить индекс минимального элемента. Вы же проходите по всей матрице и в этих переменных оказывается индекс последнего минимального элемента матрицы. Надо не в двух переменных хранить, а в массиве. Каждый индекс которого будет означать строку матрицы, а значение - индекс минимального элемента матрицы.
Но я бы сделал проще. Определить метод циклического сдвига и вызвать его для каждой строки матрицы.
System.out.println("%4d", a[i][j]);
а System.out.printf("%4d", a[i][j]);
если хотите форматированный выводВ последнем цикле j не определена, т.к. названа i, свести к одному названию
И в самой логике, вам надо свдинуть каждую строку, значит для каждой строки надо определить индекс минимального элемента. Вы же проходите по всей матрице и в этих переменных оказывается индекс последнего минимального элемента матрицы. Надо не в двух переменных хранить, а в массиве. Каждый индекс которого будет означать строку матрицы, а значение - индекс минимального элемента матрицы.
Но я бы сделал проще. Определить метод циклического сдвига и вызвать его для каждой строки матрицы.
import java.util.Arrays;
import java.util.Random;
public class Test {
//Основная функция
public static void main(String[] args) {
int m = 4, n = 5;
int[][] a = new int[m][n];
Random random = new Random();
for (int i = 0; i < a.length; i++)
for (int j = 0; j < a[i].length; j++)
a[i][j] = random.nextInt(100);
System.out.println("Исходная матрица");
printMatrix(a);
// вызов циклического сдвига для каждой строки матрицы
for (int i = 0; i < a.length; i++) {
circleShift(a[i]);
}
System.out.println("Полученная матрица");
printMatrix(a);
}
//Функция выводит на консоль матрицу а
public static void printMatrix(int[][] a) {
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++)
System.out.printf("%4d", a[i][j]);
System.out.println();
}
}
// Сдвиг до минимального элемента
private static void circleShift(int[] arr) {
int indexMinElement = 0;
int min = Integer.MAX_VALUE;
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
indexMinElement = i;
}
}
circleShift(arr, indexMinElement);
}
// Сдвиг на n элементов
private static void circleShift(int[] arr, int n) {
if (n == 0) {
return;
}
int[] b = Arrays.copyOf(arr, arr.length);
int j = 0;
for (int i = n; i < arr.length; i++) {
arr[j++] = b[i];
}
for (int i = 0; i < n; i++) {
arr[j++] = b[i];
}
}
}
Похожие вопросы
- Java.Комментирование. Надо прокомеентировать каждую строку этой программы.
- Как назвается структура данных в программировании (C#), где доступ к каждому элементу осуществляется по имени?
- Как создать цикл, который будет считать количество минимальных значений массива на джава
- Работа со строками Java Разработать программу, которая вводит строку и находит все слова указанной длины n (n вводится).
- Задача. Есть несколько множеств множеств с числом элементов от 1 до 3 - пересечения возможны. Далее внутри...
- Ребят почему оба элемента массива принимают одинаковое значение? JAVA
- Поиск определенного элемента в скриншоте.
- Как сравнить элементы массива с другой переменной?
- Составь программу в зависимости величины даны чисел матрица количество положительных и отрицательных элементов
- Изменение строки файла формата class
иначе могли бы "порвать" массив на нужные части и склеить в нужном порядке
https://www.baeldung.com/java-concatenate-arrays