Задать вопрос
@ilyablbnv
Студент.Энтузиаст

Не работает нужным образом цикл for — почему?

Здравствуйте. Пишу код, который будет проверять одномерный массив. Это собственно нужно для реализации игры "пятнашки". Вообщем, есть массив например 6, 11, 7, 15, 9, 4, 1, 14, 10, 5, 13, 3, 8, 0, 2, 12. Мне нужно чтобы цикл брал первое число ( в данном случае 6) и сравнивал его со следующими числами в массиве и определял сколько чисел меньше чем 6 стоит после него. В данном случае это 5 чисел (от 1 до 5). Потом он должен брать след число 11 и подобным образом проверять ( только уже не считая 6, потому что оно стоит перед хоть и меньше 11). Я думаю, вы поняли. Вставляю кусочек кода.

ЗЫ Забыл сказать что нужно считать кол-во инверсий( кол-во чисел, стоящих после первого) В нашем случае это 5 и далее все их сложить.

int[] p = { 6, 11, 7, 15, 9, 4, 1, 14, 10, 5, 13, 3, 8, 0, 2, 12 };
int inversions = 0;
    for(int i = 0; i < p.length; i++) {
        for(int j = i + 1; j < p.length; j++) {
             if(p[i] > p[j]) inversions++;
      }
}
  • Вопрос задан
  • 547 просмотров
Подписаться 3 Оценить 7 комментариев
Решения вопроса 2
создайте массив для каждого числа int[] inversions, а потом в цикле inversions[i]++;
Ответ написан
@Anhedonia
{ 6, 11, 7, 15, 9, 4, 1, 14, 10, 5, 13, 3, 8, 0, 2, 12 };
Посмотрите внимательно на массив.
6 > 4 , 1 , 5, 3, 0, 2 - Посчитаете сами?

P.S. 0 - лишний
P.S.S Убрал 0 и получил ответ 5 9 5 11 6 3 0 7 4 2 4 1 1 0 0
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@alexmlw
Занимаюсь программированием и электроникой
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы