Gyakorlati alapok
Hány számjegy avagy mennyi digit? - II.
Ebben a fejezetben egy tipikus tesztkérdést válaszolunk meg, amellyel egyébként valóban egy programozó akadémia tesztkérdései között találkoztam. A kérdés angol nyelven a következő volt: csakis papír és toll segítségével állapítsuk, hogy hány olyan kétjegyű szám van, ahol az egyik számjegy több, mint a másik?
Amint az a szöveges feladatoknál lenni szokott, a kérdés megértése már félsikernek számít. A magam részéről a rendelkezésre álló idő alatt nem találtam mélyebb matematikai képletet, ha esetleg valakinek erre volna valamilyen ötlete, kérem, hogy írja meg nekem.
A problémát akkor manuálisan oldottam meg:
-
kilistáztam a 10 és 99 közötti számokat,
-
töröltem azon számokat, amelyekben a digitek egyenlők (11, 22, 33, stb.),
-
2 oszlopba csoportosítottam, majd megszámoltam őket.
A Java-implementáció is nagyjából ezt az algoritmust követi:
-
Az 1. probléma az átmeneti adatok ide-oda konvertálása; ezt a toString() és az Integer.parseInt() beépített metódus teszi meg nekünk,
-
a 89 db kétjegyű számot egy for ciklus léptetője (iterátora) generálja,
-
a beállított feltételek szerint számolnak a szamlalo1 és szamlalo2 változók, ám mindeközben ki kell zárnunk azt a feltételt, ha a 2 digit egyenlő egymással (if(digit1 == digit2)),
-
a kétjegyű szám szétbontásáról a megfelelő pozíciókba állított substring() metódus gondoskodik.
Nézzük meg a futtatható Java-kódot:
class Main {
public static void main (String args[]){
String szamString = "";
int szamlalo1 = 0;
int szamlalo2 = 0;
int digit1, digit2 = 0;
for(int i = 10; i <= 99; i++){
szamString = Integer.toString(i);
digit1 = Integer.parseInt(szamString.substring(0,
1));
digit2 = Integer.parseInt(szamString.substring(1));
if(digit1 == digit2){
continue;
}
else if(digit1 > digit2){
szamlalo1++;
}
else
szamlalo2++;
}
System.out.println("Az 1. digit mennyisége: " + szamlalo1);
System.out.println("A 2. digit mennyisége: " + szamlalo2);
}
}
Végeredmény:
Az 1. digit mennyisége: 45
A 2. digit mennyisége: 36