nenicelne stevke

nenicelne stevke

Avtor: Alisa Ibrahimović

Neničelne števke

  • Navodilo V danem naravnem številu je zadnja neničelna števka najbolj desna neničelna števka v desetiškem zapisu števila. Na primer, zadnja neničelna števka števila 123 je 3, pri številu 45600 je to 6, pri številu 100 pa 1. Napiši funkcijo, ki za vsako števko od 1 do 9 ugotovi, kolikokrat se pojavi kot zadnja neničelna števka v zaporedju M,M + 1,M + 2, . . . ,N − 2,N − 1,N. Funkcija naj zapiše rezultat v tabelo tipa int[9]. Na primer, če je M = 118 in N = 122, pomeni, da obravnavamo zaporedje 118, 119, 120, 121, 122. Zadnje neničelne števke so 8, 9, 2, 1 in 2. Torej mora tabela vsebovati elemente 1, 2, 0, 0, 0, 0, 0, 1, 1, ker enica, osmica in devetka nastopajo kot zadnja neničelna števka enkrat, dvojka pa dvakrat. Pozor: Razlika med številoma N in M je lahko tako velika, da je bolje, če ne obravnavamo vsakega števila med M in N posebej, ker bi podprogram predolgo tekel. Tvoj podprogram naj bo učinkovit!

Neničelne števke

Kot je zapisano v navodilu, moramo napisati učinkovit program, tj. tak, da ne preverja vsakega števila posebej. Metoda kot parametra dobi dve celi števili in želimo, da vrne seznam dolžine 9, v katerem je zabeleženo, kolikokrat se pojavi določena števka kot prva neničelna z desne. Najprej moramo dobiti prvo neničelno števko z desne prvega števila, nato drugega, itd. Za to pa uporabimo funkcijo, ki kot parameter prejme število in vrne njegovo prvo neničelno števko. Nato lahko to funkcijo uporabljamo v zaporedju števil, med katerimi iščemo.

Program


public static int NenicelnaStevka(int x)
        {
            /*to je funkcija z imenom NenicelnaStevka, ki vrne rezultat tipa integer, prejme pa en parameter, ki je
             * tudi tipa tipa integer, tj. število x (predpostavimo, da je celo). Metoda nam vrne prvo neničelno
             števko števila, če gledamo z desne proti levi.*/
            if (x < 0)
            {
                x = x * (-1);  //če je število negativno, ga spremenimo v pozitivnega tako, da ga pomnožimo z -1
            }


            int stevka; //v spremenljivko stevka bomo shranili neničelno števko

            int s = 0; //vmesna spremenljivka

            while (x > 0) //dokler ne pridemo do konca "dolžine" števila
            {
                stevka = x % 10;  //števka je ostanek pri celoštevilskem deljenju z 10
                if (stevka != 0)
                {
                    s = stevka;  //če je različna od 0, jo shranimo v spremenljivko s, ki jo na koncu vrnemo
                    break;       //končamo while zanko
                }
                if (stevka==0)  //če so enice enake 0, izračunamo neničelne enice na številu, ki je 10krat manjše
                {
                    x = x / 10;
                }

            }
            return s;

        }

 //metoda za lep izpis tabele
        static void Izpis(int[] tab)
        {
            for(int i=0;i<tab.Length;i++)
            {
                Console.Write(" " + tab[i]);
            }
            Console.WriteLine();
        }

        static void Main(string[] args)
        {
            //testiranje programa:
            //zanimajo nas pojavitve števil od 1 do 9 na [20,4]
            int[] s = SeznamPojavitev(20, 4);
            Izpis(s);
            Console.ReadLine();
        }
    }


Komentar

  • najprej preverimo, če je število manjše od 0
  • če je, ga pomnožimo z -1, saj vmes v programu potrebujemo dolžino števila in minusa ne štejemo zraven
  • definiramo spremenljivko stevka, ki je tipa integer
  • na vsakem koraku, dokler je število x večje od 0, izračunamo novo vrednost števke
  • če je števka različna od 0, je to naša iskana števka, ki jo shranimo v spremenljivko s in jo vrnemo
  • če pa je števka enaka 0, številu x odrežemo enice in poiščemo novo neničelno števko na 10-krat manjšem številu
  • na koncu ga vrnemo
  • uporabila sem tudi metodo za lep izpis tabele
  • v main-u lahko program testiramo

Funkcija torej prejme dva parametra (a in b) in nam vrne število pojavitev števil od 1 do 9, ki se pojavijo v zaporedju števil med a in b kot neničelne števke z desne strani.

Primer 1: Zanima nas seznam pojavitev števk na intervalu od 4 do 20. Pa vnesimo v main števili v obratnem vrstnem redu, da vidimo, če program deluje pravilno.


int[] s = SeznamPojavitev(20, 4);

(nenicelneStevke.jpg)

Primer 2: Kaj pa če nas zanima število pojavitev števk na intervalu [118, 122]?
int[] s = SeznamPojavitev(118, 122);

(nenicelneStevke2.jpg)
0%
0%