Gyakorlati alapok
Hány számjegy avagy mennyi digit? - III.
Muhi Alexandra megoldása
Az előző, Hány számjegy avagy mennyi digit? - II. című fejezetben publikáltunk egy megoldást kétjegyű számok bizonyos tulajdonságainak algoritmikus megállapítására. A kérdést most Muhi Alexandra, egy rendkívül tehetséges mérnök-programozó hölgy válaszolja meg nekünk, aki érdekességképpen egy egészen más matematikai kiindulópontot választott.
A forma kedvéért ismételjük meg a kérdést: 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?
"Képlettel ezt nem igazán lehet leírni, de halmazokkal annál inkább:
összes eset - a nem jó esetek száma
9 db nem jó eset van: 11, 22, 33, 44, 55, 66, 77, 88, 99. És ugye a feladat
az volt, hogy papíron ceruzával oldjuk meg...
Az alábbi algoritmus magyarázata szintén az egymást kiegészítő halmazokban
keresendő: a
for
ciklus jelképezi az egyes számjegyekkel kezdődő kétjegyű
számokat. Ha x = 1, akkor a 10-19-ig lévő
kétjegyű számokból gyűjtjük ki a számunkra megfelelőt, ha x = 2, akkor a 20-tól 29-ig és így tovább. Ezekre
az alábbi magyarázat során úgy hivatkozom, hogy sorozat, azaz x = 1 esetén a 10 tagú sorozat, aminek a tagjait
vizsgálom: 10, 11, 12, 13, 14, 15, 16, 17, 18, 19. A for ciklus azért kell,
hogy bejárjuk a kétjegyű számok halmazát.
A szamlalo2 változóba gyűjtjük azon esetek
számát, mikor a kétjegyű szám 2. számjegye nagyobb, mint az első.
Tehát, ha x = 1-et nézünk (azaz az 1-essel
kezdődő kétjegyű számok), akkor tudjuk, hogy azok az esetek jók nekünk a
sorozat elemei közül, hogy 12, 13, 14, 15, 16, 17, 18, 19, azaz összesen 8 db
jó eset van. Tehát, ahol éppen vagyunk, mindig 1-gyel több eset lesz nekünk
NEM megfelelő, mint amelyik számjeggyel kezdődik a sorozat (azaz jelen esetben
2 eset nem jó a 10 db-ból (a 10 és 11), vagy 1 eset a 9-ből, hiszen tudjuk,
hogy minden sorozatban van 1 db olyan eset, ami biztosan nem jó, jelen esetben
a 11, tehát alapból csak 9 esetet kell nézni minden sorozatban). Ezért 9 - x a képlet, és x =
1-nél a szamlalo2 értéke 9 - 1 = 8.
Ha x = 2, akkor a következők nem jók: 20, 21, 22
azaz marad még 7 db, ami jó nekünk, ez a 9 - 2 = 7 db, tehát a
szamlalo2
értéke most 7.
A szamlalo1 változóba gyűjtjük azon esetek
számát, mikor a kétjegyű szám 1. számjegye nagyobb, mint a második. Ez a
halmazokkal magyarázva az előző halmaz ellentettje, ezért van a
9 - szamlalo2 képlet.
Nézzük meg a futtatható Java-kódot:
class Main {
public static void main(String[] args) {
int szamlalo = 0; //számláló az összes jó eset számára
int szamlalo1 = 0; //hányszor nagyobb az 1. számjegy
int szamlalo2 = 0; //hányszor nagyobb a 2. számjegy
int digit1 = 0;
int digit2 = 0;
System.out.println("A szamlalo1 változó írja ki azon esetek számát,
amikor a
kétjegyű szám első számjegye nagyobb.");
System.out.println("A szamlalo2 változó írja ki azon esetek számát,
amikor a
kétjegyű szám második számjegye nagyobb.");
System.out.println();
for (int x = 1; x <= 9; x++) {
System.out.println(x + ". sorozat, " + x + "-el kezdődő kétjegyű számok");
szamlalo2 = (9 - x);
digit2 += szamlalo2;
System.out.print("számláló2: " + szamlalo2 + " db : ");
for (int i = 9; i >x; i--) {
System.out.print(x + "" + i + ", ");
}
szamlalo1 = 9 - szamlalo2;
digit1 += szamlalo1;
//System.out.println();
System.out.print("számláló1: "+szamlalo1+" db : ");
for (int j = 0; j < x; j++) {
System.out.print(x + "" + j + ", ");
}
System.out.println();
szamlalo += (szamlalo1 + szamlalo2);
System.out.println( x + ". sorozatban, összesen: " + szamlalo + " db");
System.out.println();
}
System.out.println("Az 1. digit mennyisége: " + digit1);
System.out.println("A 2. digit mennyisége: " + digit2);
}
}
Végeredmény:
A szamlalo1 változó írja ki azon esetek számát, amikor a
kétjegyű szám első számjegye nagyobb.
A szamlalo2 változó írja ki azon esetek számát, amikor a kétjegyű szám második
számjegye nagyobb.
1. sorozat, 1-el kezdődő kétjegyű számok
számláló2: 8 db : 19, 18, 17, 16, 15, 14, 13, 12, számláló1: 1 db : 10,
1. sorozatban, összesen: 9 db
2. sorozat, 2-el kezdődő kétjegyű számok
számláló2: 7 db : 29, 28, 27, 26, 25, 24, 23, számláló1: 2 db : 20, 21,
2. sorozatban, összesen: 18 db
3. sorozat, 3-el kezdődő kétjegyű számok
számláló2: 6 db : 39, 38, 37, 36, 35, 34, számláló1: 3 db : 30, 31, 32,
3. sorozatban, összesen: 27 db
4. sorozat, 4-el kezdődő kétjegyű számok
számláló2: 5 db : 49, 48, 47, 46, 45, számláló1: 4 db : 40, 41, 42, 43,
4. sorozatban, összesen: 36 db
5. sorozat, 5-el kezdődő kétjegyű számok
számláló2: 4 db : 59, 58, 57, 56, számláló1: 5 db : 50, 51, 52, 53, 54,
5. sorozatban, összesen: 45 db
6. sorozat, 6-el kezdődő kétjegyű számok
számláló2: 3 db : 69, 68, 67, számláló1: 6 db : 60, 61, 62, 63, 64, 65,
6. sorozatban, összesen: 54 db
7. sorozat, 7-el kezdődő kétjegyű számok
számláló2: 2 db : 79, 78, számláló1: 7 db : 70, 71, 72, 73, 74, 75, 76,
7. sorozatban, összesen: 63 db
8. sorozat, 8-el kezdődő kétjegyű számok
számláló2: 1 db : 89, számláló1: 8 db : 80, 81, 82, 83, 84, 85, 86, 87,
8. sorozatban, összesen: 72 db
9. sorozat, 9-el kezdődő kétjegyű számok
számláló2: 0 db : számláló1: 9 db : 90, 91, 92, 93, 94, 95, 96, 97, 98,
9. sorozatban, összesen: 81 db
Az 1. digit mennyisége: 45
A 2. digit mennyisége: 36