O to treść zadania
Jeszcze kilkanaście lat temu wykręcanie numeru telefonicznego było czynnością, która niejedną sekretarkę mogła przyprawić o ból palców. Niewygodne tarcze na aparatach i impulsowy wybór numerów powodowały, że nawiązanie połączenia trwało przesadnie długo, zwłaszcza gdy linia była zajęta i przy każdej próbie trzeba było wykręcać ten sam numer.
Dziś sytuacja jest o niebo lepsza. Wybór numeru odbywa się tonowo, a do dyspozycji mamy wygodne klawiatury. Jedną z ich charakterystycznych cech jest przyporządkowanie każdej cyfrze trzech lub czterech liter, tak jak w tabeli poniżej.
Cyfra Litery
2 ABC
3 DEF
4 GHI
5 JKL
6 MNO
7 PQRS
8 TUV
9 WXYZ
Dzięki takiemu przyporządkowaniu pewne numery łatwiej jest zapamiętać jako tekst. Dla przykładu numer 252625682 może być reprezentowany przez tekst ALAMAKOTA. Takie udogodnienie ma jednak pewną wadę. Wszelkiego rodzaju formularze i inne dokumenty wymagają podania numeru w postaci cyfrowej, a to wymagałoby doskonałej pamięci lub użycia klawiatury telefonu. Napisz program, który będzie pomocny w takich sytuacjach, tzn. zamieni numer telefoniczny z postaci tekstowej na postać numeryczną.
Wejście
Dane podawane są na standardowe wejście. W pierwszym wierszu podana jest liczba N (1<=N<=20) zestawów danych. Dalej podawane są zestawy danych zgodnie z poniższym opisem:
Jeden zestaw danych
W pierwszym i jedynym wierszu zestawu danych podany jest ciąg wielkich liter alfabetu łacińskiego – tekstowa postać numeru telefonicznego. Długość ciągu jest nie mniejsza niż 4 i nie przekracza 20 znaków.
Wyjście
Wyniki programu powinny być wypisywane na standardowe wyjście. W kolejnych wierszach należy podać odpowiedzi obliczone dla kolejnych zestawów danych. Wynikiem dla jednego zestawu jest cyfrowa postać numeru telefonicznego podanego na wejściu.
Przykład
dane wejściowe:
2
ALAMAKOTA
BRZECZYSZCZYKIEWICZ
wynik:
252625682
2793299792995439429
Poniżej daję kod, kod przechodzi przykładowe zadanie bez problemu, zwraca poprawny wynik, jak i dla innych danych też poprawny
//Main.java
import java.util.*;
import java.io.*;
public class Main {
public static void main(String args[])
throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String a;
int t;
Scanner keyboard = new Scanner(System.in);
String w[] = new String[21];
do {
t = keyboard.nextInt();
}while(t<1||t>21);
for(int x =0;x<t;x++){
do {
a = br.readLine();
a = a.toUpperCase();
}while(a.length()<4||a.length()>21);
char charArray[] = a.toCharArray();
int b = a.length();
String k = "";
for (int i=0;i<b;i++){
if (charArray[i]=='A'){
k = k+"2";
}
if (charArray[i]=='B'){
k = k+"2";
}
if (charArray[i]=='C'){
k = k+"2";
}
if (charArray[i]=='D'){
k = k+"3";
}
if (charArray[i]=='E'){
k = k+"3";
}
if (charArray[i]=='F'){
k = k+"3";
}
if (charArray[i]=='G'){
k = k+"4";
}
if (charArray[i]=='H'){
k = k+"4";
}
if (charArray[i]=='I'){
k = k+"4";
}
if (charArray[i]=='J'){
k = k+"5";
}
if (charArray[i]=='K'){
k = k+"5";
}
if (charArray[i]=='L'){
k = k+"5";
}
if (charArray[i]=='M'){
k = k+"6";
}
if (charArray[i]=='N'){
k = k+"6";
}
if (charArray[i]=='O'){
k = k+"6";
}
if (charArray[i]=='P'){
k = k+"7";
}
if (charArray[i]=='Q'){
k = k+"7";
}
if (charArray[i]=='R'){
k = k+"7";
}
if (charArray[i]=='S'){
k = k+"7";
}
if (charArray[i]=='T'){
k = k+"8";
}
if (charArray[i]=='U'){
k = k+"8";
}
if (charArray[i]=='V'){
k = k+"8";
}
if (charArray[i]=='W'){
k = k+"9";
}
if (charArray[i]=='X'){
k = k+"9";
}
if (charArray[i]=='Y'){
k = k+"9";
}
if (charArray[i]=='Z'){
k = k+"9";
}
}
w[x] = k;
}
for(int i =0;i<t-1;i++){
System.out.println(w[i]);
}
System.out.print(w[t-1]);
}
Robiłem zadanie na szybko, sklejone z moich różnych kodów źródłowych, temu trochę dziwnie wygląda, np scanner + bufferreader, ale wg mnie wszystko poprawne.
Długi kod, ale tylko przez to, że nie chciało mi się skracać literek A - Z.. bo tak jak teraz jest to zajmuje sporo, ale dla mnie liczy się wynik.