Перестановочка подоспела

  • 5
  • Недоступна
Игры со списками — лучшее времяпрепровождение! Реклама так себе получается? Пожалуй, лучшая реклама средства языка программирования — его частое применение. Рекламируем списки, решая задачу: задаем числа m и n, печатаем n строк и заполняем ими список. После этого совершаем незатейливую манипуляцию: переставляем m первых строк в конец списка
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (155)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
ВасяКот9 уровень
пятница, 05:47
самое сложное в этой задаче - её условие...завидую тем,кто сразу понял чё тут делать-то надо.
Alex V. Mel9 уровень
1 августа, 19:38
Словарь Введите слово ПЕРЕСТА́ВИТЬ Поставить на другое место. "П. стулья" Как важно однозначно понимать смысл слова.
Людмила10 уровень
30 июля, 13:34
Не понимаю, почему уже вторая задача не проходит валидацию с while (true). После замены на for с конкретным значением все ОК.
Станислав9 уровень, Москва
22 июля, 14:36
Почему если писать через Scanner, вначале считывает пустую строку? Откуда он ёё берёт? Тот же самый код через BufferedReader работает идеально.
IceBerg34 уровень, Днепр
25 июля, 14:25
А ты строки считываешь, или где-то там nextInt() используешь ?
Станислав9 уровень, Москва
29 июля, 18:07
nextInt на первые два значения, потом цикл for (...) list.add(scan.nextLine());
IceBerg34 уровень, Днепр
29 июля, 18:13
nextLine() читает символы до перевода строки, а nextInt() просто находит следующее числовое совпадение, значит если ты напишешь:
12 world
то nextInt() считает "12", а nextLine() " world" (используем поочередно). Если же ты просто напишешь
12
то nextInt() считает "12", но перевод строки останется, значит nextLine() просто считает пустоту до этого знака.
Станислав9 уровень, Москва
29 июля, 18:34
ты имел ввиду *после 12? Или именно до? Так, а что я должен был написать, что бы это сработало верно? /n?) Или так не получилось бы? между ...
int N = scan.nextInt();
//здесь что-то нужно было написать? переход на новую строку или?
for (int i=0;i<N;i++) Q.add(scan.nextLine());
IceBerg34 уровень, Днепр
29 июля, 18:48
Я бы написал
int N = Integer.parseInt(scan.nextLine();
хотя сам использую BufferedReader. Если ты написал "12" и нажал Enter, то ты по факту отправил строку "12\n" значит nextInt() сначала считает "12", а потом nextLine() считает всё, что находится после "12", и до окончания строки "\n", соответственно - ничего.
Станислав9 уровень, Москва
29 июля, 19:14
Спасибо большое, разобрался. Загуглил разницу в =scan.nextLine() и =Integer.parseInt(scan.nextLine()) Integer.parseInt(scanner.nextLine()) vs scanner.nextInt() Вкратце, проблему можно было решить так:
int N = scan.nextInt();
scan.nextLine();//считывает символ строки, который оставил после себя nextInt();
for (int i=0;i<N;i++) Q.add(scan.nextLine());
Но правильнее через parse =)
Wladyslaw20 уровень
13 июня, 15:58
просто по вайлу гоняйте м раз нулевой элемент. Добавляете его в конец и удаляете из листа
Daria Ignatenko20 уровень
10 июня, 16:41
Валидатор не принимал решение пока не поменяла местами int N = Integer.parseInt(reader.readLine()); int M = Integer.parseInt(reader.readLine()); То есть, для валидатора надо, чтобы сначала считали M, а потом N, не смотря на обратное в условии. Остальное - по условию.
Wladyslaw20 уровень
13 июня, 15:57
"Ввести с клавиатуры 2 числа N и M." Но ведь именно такая последовательность и задана в условии
Daria Ignatenko20 уровень
13 июня, 18:45
именно эту последовательность и не принял валидатор, а когда поменяла местами и сделала int M = Integer.parseInt(reader.readLine()); int N = Integer.parseInt(reader.readLine()); все прошло
Wladyslaw20 уровень
13 июня, 19:30
Странно У меня в последовательности из условия все прошло
Lil Freezer15 уровень, Пермь
14 августа, 09:29
лол, тупо было M N, не принимало, сделал N M, приняло
Айдар15 уровень, Казань
9 июня, 20:34
Поправка! "Ввести N строк с клавиатуры"
MartyMcAir18 уровень
7 июня, 19:35
Чтоб пройти валидацию 1. юзайте BufferedReader, а не Scanner 2. юзайте для вывода результа for(String st : list){ }, а не с лямбдами list.forEach((z)->System.out.println(z)); (хотя раньше пропускало, не знаю может глюк) 3. Не использовать вариант решения с двумя ArraysList, т.е. когда с первого списка копируем первые M элементы, потом их удаляем и перекидываем со второго списка в первый ранее удаленные элементы. А использовать: в обычном цикле for(int i=0; i<N; i++){ } пишем ветвление (M - это то что в требовании т.е. престановка M раз.. а check=0; )
if(M>check){
    list.add(list.remove(0));
    check++;
}
Если ввести N=6 и M=3.. Т.е. потом вводим допустим 6 цифр 1,2,3,4,5,6 _ На выходе должно получится 4,5,6,1,2,3 (да каждый элемент с новой строки)
Maksimt5812 уровень, Москва
28 июня, 12:42
list.forEach(System.out::println); с лямбдами пропустило решение!
Derp 12 уровень, Санкт-Петербург
4 июня, 08:46
вызвала трудности в очередной раз невнимательность, надо м раз первую строку скопировать в конец списка.
Murzin Vitaliy9 уровень
23 мая, 19:11
Вывод верный, но валидацию не проходило. Помогло почистить код от лишнего, например убрал одну переменную, заработало.