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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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