Постановка задачи
Обычная ошибка при наборе состоит в том, что вы помещаете ваши руки на клавиатуру на один ряд правее верной позиции. Тогда «[latex]Q[/latex]» печатается как «[latex]W[/latex]», «[latex]J[/latex]» печатается как «[latex]K[/latex]» и т.д. Ваша задача состоит в расшифровке сообщения, напечатанного таким образом.
Входные данные
Входные данные состоят из нескольких строк текста. Каждая строка может содержать цифры, пробелы, прописные буквы (кроме [latex]Q, A, Z [/latex]) и знаки препинания, показанные выше [кроме обратной кавычки (`)]. Клавиши, обозначенные словами [Tab, BackSp, Control и т.д.], не представлены во входных данных.
Выходные данные
Вы должны заменить каждую букву и знак пунктуации тем, который находится непосредственно слева от него на клавиатуре QWERTY, изображенной выше. Пробелы во входных данных должны повторяться в выходных.
Тесты:
Входные данные | Выходные данные |
O S, GOMR YPFSU/ | I AM FINE TODAY. |
,u vpp; vpfr | MY COOL CODE |
VPFR RBRTUEJRTR. RBRTUFSU | CODE EVERYWHERE, EVERYDAY |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
import java.util.*; import java.lang.*; import java.io.*; class Main { public static void main (String[] args) { String x = new String(); Scanner sc = new Scanner(System.in); String y = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./"; try { while (sc.hasNextLine()) { x = sc.nextLine(); x = x.toUpperCase(); int found; for (int i = 0; i < x.length(); i++) { if (x.charAt(i) == ' ') { System.out.print(" "); } else { found = y.indexOf(x.charAt(i)); if (found == 0) found = y.length(); System.out.print(y.charAt(found-1)); } } System.out.print("\n"); } } finally { sc.close(); } } } |
Описание решения:
Для решения поставленной задачи необходимо задать строку, в которой будем хранить все символы с условия, которые необходимо выводить. Так как не указано количество строк входных данных, то будем принимать до конца входного потока.
Для каждой строки будем просматривать все символы, и для каждого из них будем использовать следующий алгоритм:
- Если данный символ пробел – то выведем его на экран.
- Иначе, с помощью функции [latex]Indexof() [/latex] найдем номер вхождения данного символа в проверочном массиве y, и выведем предыдущий элемент из этого массива.
- Повторяем пункты 1, 2 до тех пор, пока не дойдем до конца строки [latex]x[/latex]. После этого перейдем на новую строку.
Условие задачи на сайте e-olymp.com можно найти здесь.
Как вы думаете, мне удастся добиться от Вас правильных отступов?
Исправил
Был бы счастлив…
Поднимите finally выше
Поднял
Зачёл 🙂