Что делать, когда я принимаю участие в соревнованиях по программированию, чтобы сканер не читал ввод? - PullRequest
2 голосов
/ 09 января 2012

Я был в одном соревновании раньше, и я смотрел в другом. Но когда я в нем, я понял, что понятия не имею, что делать с пользовательским вводом с машины. Когда обычный человек использует его, я знаю, что могу просто выйти, назначив для этого ключевые слова, но как бы я справился с этим в соревновании, когда он подключен к машине, которая генерирует собственный код для проверки моего? Как мне написать свой код, чтобы выйти из цикла while, когда я понятия не имею, каким будет последний ввод?

При взгляде на это в Java:

while(sc.hasNext()){ /*code here. Breaks out when machine input is done*/}

Я посмотрел на это и наткнулся на это: «Чтение входных данных из STDIN и вывод в STDOUT». Когда я нажал на ссылку для java, он дал мне википедию для буферизованного ридера или сканера, но не дал никакой дополнительной информации, кроме только что приведенного примера кода.

Пример ввода:

2
2 5
3 4 8

Предположим, что первая строка - это количество строк, которые нужно прочитать. Как мы узнаем, когда прекратить чтение в каждой отдельной строке, или мы просто прочитали всю строку?

Ответы [ 3 ]

2 голосов
/ 09 января 2012

Перейдите на http://www.go -hero.net / jam / , в котором записаны все введенные решения для Google Code Jam.

Вы можете выполнить поиск по языку и увидеть множество примеров того, как читаются входные файлы.

Вероятно, вы лучше поймете различные способы сделать это, посмотрев на примеры.

2 голосов
/ 09 января 2012
while(sc.hasNext() && !shouldStopReading){ /*code here*/}

или есть еще ...

while(sc.hasNext()){ /*code here*/ if (shouldStopReading) { break; } }

Чтобы ответить на ваши изменения:

Пример ввода: 2 2 5 3 4 8

Предположим, что первая строка - это количество строк, которые нужно прочитать. Как мы знать, когда прекратить чтение в каждой отдельной строке или мы просто вся линия?

"Строка" обычно заканчивается комбинацией возврата каретки / перевода строки в Windows или просто переводом строки в Mac / Unix / Linux. Вы можете просто искать эти символы, чтобы разделить линии.

Обычно есть функции специально для чтения "строки".

Ваш пример кажется довольно простым. Как псевдокод:

String lineCountString = ReadLine();
int lineCount = StringToInt(lineCountString);
for (i from 0 to lineCount - 1)
     String aLine = ReadLine();
     DoSomethingWithEachLine(aLine);
1 голос
/ 09 января 2012

В некоторых соревновательных задачах указывается счет , который определяет действительный ввод, как показано в этом примере .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...