Java Fundamentals [EXAM]- 15 November 2015 - 03. Rubik's Matrix
Здравейте !
Въпросът ми относно тази задача е по-скоро за sub-lists, защото това е начина по който се опитвах да я реша, но не успя да ми се получи :)
Та значи идеята ми беше да събера всички числа, които трябва да въртя нанякъде(лист е цяла колона или цял ред) в един ArrayList от Integer и после чрес sublist да взема Left Part and Right Part , да ги слепя и да получа rotated лист.
Като напълня ArrayList-a с оригиналната продредба, оптах няколко начина, нищо:
ArrayList<Integer> leftPart = new ArrayList<Integer>(colList.subList(newList.size() - (moves - 1), newList.size()));
ArrayList<Integer> rightPart = new ArrayList<Integer>(colList.subList(0, newList.size() - (moves -1)));
newList.addAll(leftPart);
newList.addAll(rightPart);
не се пълнят изобщо по-този начин. нито по този :
java.util.List<Integer> leftPart = colList.subList(0, moves);
java.util.List<Integer> rightPart = colList.subList(moves, colList.size());
Има ли начин да сработи задачата по рози начин и как ? :)
Благодаря!
Единственото нещо, което не ми е все още ясно е как трябва да се rearrange-не тази матрица....
Не мога да разбера на какъв принцип е този swap. Пробвах да ги swap-вам стойност след стойност, но не става. Матрицата се пренарежда както беше в началото, но не мисля че това е правилният начин :D
Пъровото нещо, което се иска от теб в задачата е да размешаш числата в матрицата по дадени правила. След като вече матрицата е размешата (или не е) е време да започнеш да я подреждаш обратно.
Да кажем, че това е нашата размешана матрица.
1 3 5
9 8 7
2 4 6
Итерираш през нея по стандратният начин от ред 0 колона 0...3, ред 1 колона 0..3 и така и проверяваш дали елемнта за съответната позиция е развен на търсеният от теб елемент, който можеш да намериш по различни начини. Най-лесният вариант е с една променлива, която ще инкрементираш с 1 при всяко влизане във вътрешният цикъл.
В първият случай проверяваме дали 1 = елемента на ред 0, колона 0 (цифрата 1) и след като условието е вярно продължаваме с итерацията.
2 = елемента на ред 0 колона 1 (цифрата 3)? В случай на несъответсвие трябва да запалим още два цикъла, които итново ще итерират през нашата матрицата и тяхната мисия ще бъде да намерят стойноста която търсим, но ненамираме на точното позиция, а именно 2.
След като я намерим разменяме двете стойности, печатаме съответното съобщение и продължаваме да въртим по-горните два цикъла при, които бяхме стигнали до търсена стойност 2 като вече ще търсим 3.
Вече матрицата ни изглежда така:
1 2 5
9 8 7
3 4 6
Надявам се, че е станало една идея по-ясно какво се иска от задачата. Ако имаш още въпроси ще се радвам да отговоря. :)
Благодаря за обяснението :). Най-накрая разбрах къде са ми грешките !